Sök efter rader med specialtecken i SQL Server
Medan du felsöker ett programmeringsproblem idag märkte jag att du inte kan använda en LIKE-sökning efter strängkolumner som innehåller specialtecken som% eller _ utan att använda en speciell syntax. Att ta reda på problemet tog bara några minuter, men det är alltid lättare att komma ihåg syntax om du skriver om det.
Så ja, det här inlägget är enbart till min fördel. Förhoppningsvis kommer det att hjälpa någon annan också.
Låt oss säga att du vill hitta några fält som innehåller texten "100%", så du sammanställer denna fråga:
VÄLJ * FRÅN tabellenamn VAR Fältnamn LIKE '% 100 %%'
I stället för vad du ville ha får du alla rader som innehåller "100" och raderna som innehåller "100%".
Problemet här är att SQL Server använder procenttecknet, understrykning och kvadratfästen som specialtecken. Du kan helt enkelt inte använda dem som en vanlig karaktär i en LIKE-fråga utan att flytta dem.
Square Bracket Escape
Du kan omge% eller _ med fyrkantiga parentes för att berätta för SQL Server att tecknet inuti är ett vanligt tecken.
VÄLJ * FRÅN tabellenamn VAR Fältnamn LIKE '% 100 [%]%'
T-SQL ESCAPE Syntax
Alternativt kan du lägga till ESCAPE-operatören på din fråga och lägga till ett \ tecken före det värde du vill fly från.
VÄLJ * FRÅN tabellenamn VAR Fältnamn LIKE '% 100 \ %%' ESCAPE '\'
ESCAPE '\' delen av frågan berättar för SQL-motorn att tolka tecknet efter \ som en bokstav i stället för som ett jokertecken.
Personligen finner jag den andra metoden lättare att hantera, och du kan också använda den för att flytta en fyrkantig konsol också.