Autor Zpráva
Karel Urban
Profil
Zdravim, mam problém s příkazem BETWEEN (pokud je teda vůbec vhodný). Data z databáze vybírám příkazem: select * from alu_rafky where roztec like '5/120/72.5%' order by cena;. Potřeboval bych ale, aby mi z databáze "vyjely" data, která jsou rovna '5/120/72.5%' a větší, nicméně lišit se smí jen poslední číslo 72.5. Čili potřebuju z databáze vytáhnout '5/120/72.5%' a třeba taky '5/120/74.1%' apod. Zkoušel jsem příkaz: select * from alu_rafky where roztec between '5/120/72.5%' and '5/120/100%';, ale nevybralo mi to nic.
Předem díky za rady.
Nox
Profil
Řekl bych že between povoluje pouze práci s čísli a '5/120/72.5%' je řetězec a ne číslo, dokonce to není ani smysluplně na číslo převeditelné
Nemám veškeré informace, ale možná je to špatný návrh databáze a tato čísla se měla ukládat zvlášť

Navíc pokud použijete like tak v daném řetězci znamená každé "%" 0-nekonečno libovolných znaků,
takže první dotaz by vybral i třeba záznam s '5/120/72.5A3g'
blaaablaaa
Profil
Karel Urban
muzete zkusit substring a substring_index, ale je to docela prasarna takhle delat, doporucuji predelat db

SUBSTRING_INDEX(SUBSTRING(roztec, 6) ,'%',1) -- pocita s tim, ze ze vse pred tim percentilem ma 6 znaku
Joker
Profil
Karel Urban
Řekl bych typický příklad problémů, které může způsobit špatný návrh databáze.
Moc o tom nevím, ale tuším význam toho údaje je něco jako počet šroubů, vzdálenost mezi nimi (čili rozteč) a to třetí číslo nevím.

Čili, za prvé, ukládáte tři nezávislé hodnoty v jednom sloupci- hrubá chyba. Za druhé, čísla se ukládají jako řetězec.
Karel Urban
Profil
Problém vyřešen, místo posledního 100 jsem dal 99 a funguje to(poslední číslo stejně větší než 99 nikdy nebude. Jinak třetí číslo je středová díra. Je to taková prasárnička, ale databázi už jsem takhle dostal a předělávát 12000 záznamů je prostě.....hustý....Vyhledávání funguje, "špatný" disky to neháže(menší centr díra nebo špatnou rozteč, takže to neřešim. Nicméně potřebuju k tomu ještě přidat (už z jinýho sloupce) další hodnotu, mělo by to vypadat nějak takhle: select * from alu_rafky where roztec between '5/120/72.5%' and '5/120/99%' + tam nějak potřebuju přidat ET between '35' and '40' ;

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: