T-SQL

LIKE: ESCAPE a COLLATE

Jak používat klauzuli LIKE ví asi každý. Ale u mladších kolegů se často setkávám s tím, že si neumí poradit s jejím využitím v prostředí s různými kolacemi a nebo nevědí, jak dosáhnout správného výsledku v případě, že hledají řetězec, který obsahuje některý se speciálních znaků, např. %.

COLLATE

Řešení problémů s výběrem správné kolace je jednoduché: stačí využít COLLATE direktivu stejně jako v jakýchkoliv jiných případech, např. když  joinujeme sloupce napříč databázemi s rozdílnou kolací:

SELECT * 
FROM dbo.SampleTable 
WHERE Col1 LIKE '[a-d]%' COLLATE Latin1_General_BIN

Takto jednoduše můžeme u LIKE zařídit třeba hledání všech řetězců, které začínají na písmena a až d, což pro anglickou kolaci znamená písmena a,b,c,d, kdežto pro českou a,b,c,č,d.

ESCAPE

ESCAPE direktivu budeme potřebovat vždy, když chceme hledat řetězce, které obsahují některé speciální znaky, které běžně využíváme v podmínce LIKE pro nastavení jejího chování, např. %, _ , [ atd.

ESCAPE funguje tak, že pomocí něho můžeme určit, že námi zvolený znak bude využíván jako značka, kterou umístíme před speciální znaky a tím je označíme tak, že již nebudou plnit svoji speciální funkci, ale budou považovány za běžný řetězec.
V příkladu níže vidíme, že jsme zvolili zpětné lomítko ‘/’ jako separátor speciálních znaků.
Nebudeme tedy hledat všechny řetězce začínající na ‘Novak’, tedy např. Nováková, ale místo toho hledáme všechny výskyty řetězce ‘Novak%’.

SELECT * FROM dbo.Person WHERE Surname LIKE 'Novák/%' ESCAPE '/'

Leave a Reply

Your email address will not be published. Required fields are marked *