Autor Zpráva
luma64
Profil
Zdravím. AKo pls dosiahnem presné porovnanie reťazca v sql príkaze

 select meno from  table where meno like 'Ján%'

Potrebujem nájsť len tie záznamy, ktoré obsahujú Ján, mne však select zobrazí aj napr. Jandák, Janko atď.
Vďaka !
SqlGuru
Profil *
SELECT `meno` 
FROM `table`
WHERE `meno` IN  (SELECT FROM_BASE64('SsOhbg'))
Radek9
Profil
luma64:
MySQL u běžných porovnání většinou nerozlišuje mezi znaky s diakritikou a bez ní. Je tedy nutné manuálně přepnout na binární shodu:
SELECT meno FROM table WHERE meno LIKE 'Ján%' COLLATE utf8_bin;

Pokud bys chtěl i case-insensitive search, tak takto:
SELECT meno FROM table WHERE LOWER(meno) LIKE LOWER('Ján%') COLLATE utf8_bin;
Keeehi
Profil
luma64:
select meno from  table where meno like 'Ján%'
Předchozí ti neradí úplně špatně ale je to až další stupeň. Ono ti možná stačí jen obyčejné porovnání
select meno from table where meno = 'Ján'
Tomášeek
Profil
Radek9:
Ta verze s LOWER bude pomalá, nebude použita cache. Pro větší tabulku nepoužitelné.
Radek9
Profil
Keeehi:
Vzhledem k tomu, že má ten sloupec obsahovat „Ján“, nikoli se mu přímo rovnat, to nedává smysl, ne? Navíc tohle by stále vybralo „Ján“ i „Jan“. Záleží na použitém porovnání.

Tomášeek:
O tom samozřejmě vím, ale nepředpokládám, že to v tomto případě bude potřeba. Jinak se ale case-insensitive search (se zachováním rozdílů diakritiky) udělat nedá. Leda si implementovat vlastní porovnání.
Tomášeek
Profil
Radek9:
Ten LOWER sloupec muze ty preppočítány bokem a pracovat s nim.

Vím, ze ty to víš, jen pro tazatele-zacatecnika mi přišlo vhodně to doplnit.
Radek9
Profil
Tomášeek:
Pravda, díky za doplnění.
luma64
Profil
Vďaka za pomoc !
Kajman
Profil
Myslím, že lower na cache vliv nemá. Spíše ovlivní nevyužití případného indexu, ale to stejné udělá i změna porovnání. Pokud jde o rychost a je na tom sloupci index, tak lze udělat dotaz, co najde záznamy i ty podobné a až na tom výsledku vynutit binární porovnání. Jestli tam bude i lower už nebude skoro žádný rozdíl.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0