Søg efter rækker med særlige tegn i SQL Server
Under fejlfinding af et programmeringsproblem i dag bemærkede jeg, at du ikke kan bruge en LIKE søgning efter strengkolonner, der indeholder specialtegn som% eller _ uden at bruge en særlig syntaks. At finde ud af problemet tog kun et par minutter, men det er altid lettere at huske syntax, hvis du skriver om det.
Så ja, dette indlæg er udelukkende til min fordel. Forhåbentlig hjælper det også andre.
Lad os sige, at du vil finde nogle felter, der indeholder teksten "100%", så du sammensætter denne forespørgsel:
VÆLG * FRA tabelnavn WHERE feltnavn LIKE '% 100 %%'
I stedet for hvad du ønskede vil du få alle de rækker, der indeholder "100" såvel som rækkerne, der indeholder "100%".
Problemet her er, at SQL Server bruger procenttegn, understregning og firkantede parenteser som specialtegn. Du kan simpelthen ikke bruge dem som en almindelig karakter i en LIKE forespørgsel uden at undslippe dem.
Square Bracket Escape
Du kan omsætte% eller _ med firkantede parenteser for at fortælle SQL Server, at tegnet inde er et almindeligt tegn.
SELECT * FROM tablename WHERE feltnavn LIKE '% 100 [%]%'
T-SQL ESCAPE-syntaks
Alternativt kan du tilføje ESCAPE-operatøren på din forespørgsel og tilføje et \ tegn før den værdi, du vil flygte.
VÆLG * FRA tabelnavn WHERE feltnavn LIKE '% 100 \ %%' ESCAPE '\'
ESCAPE '\' delen af forespørgslen fortæller SQL-motoren at fortolke karakteren efter \ som en bogstavkarakter i stedet for som et jokerkort.
Personligt finder jeg den anden metode lettere at håndtere, og du kan også bruge den til at undslippe en firkantet beslag.