Vyhledávání řádků se speciálními znaky v SQL Serveru
Při řešení problému s programováním jsem si dnes všiml, že nelze použít hledání LIKE pro sloupce řetězce obsahující speciální znaky, jako je% nebo _, aniž byste použili speciální syntaxi. Vypracování problému trvalo jen několik minut, ale zapamatování syntaxe je vždy snadnější, pokud o něm píšete.
Takže ano, tento příspěvek je výhradně pro můj prospěch. Doufejme, že to pomůže i někomu jinému.
Řekněme, že chcete najít pole, která obsahují text "100%", takže tento dotaz sestavujete takto:
SELECT * FROM název tabulky WHERE název pole LIKE '% 100 %%'
Namísto toho, co jste chtěli, získáte všechny řádky, které obsahují "100", stejně jako řádky obsahující "100%".
Problém je, že SQL Server používá znaky procenta, podtržítka a hranaté závorky jako zvláštní znaky. Jednoduše je nemůžete použít jako obyčejný znak v dotazu LIKE, aniž byste je unikli.
Úhel náměstí
Můžete obklopit% nebo _ pomocí hranatých závorek SQL serveru, že znak uvnitř je pravidelný znak.
SELECT * FROM název tabulky WHERE název pole LIKE '% 100 [%]%'
Syntaxe T-SQL ESCAPE
Případně můžete připojit operátor ESCAPE k dotazu a přidat hodnotu \ before hodnota, kterou chcete uniknout.
SELECT * FROM název tabulky WHERE název pole LIKE '% 100 \ %%' ESCAPE '\'
Část dotazu ESCAPE '' říká, že stroj SQL interpretuje znak za znak \ \ jako doslovný znak namísto jako zástupný znak.
Osobně se jedná o druhou metodu, s níž lze lépe jednat, a můžete ji použít také k tomu, abyste unikli hranatou konzolu.