Search For Rows With Special Characters in SQL Server Căutare pentru rânduri cu caractere speciale în SQL Server
While troubleshooting a programming problem today I noticed that you can't use a LIKE search for string columns containing special characters like % or _ without using a special syntax. În timp ce Rezolvarea problemelor de o problemă de programare astăzi, am observat că nu puteţi folosi o căutare ca pentru coloane string conţinând caractere speciale cum ar fi% sau _ fără a utiliza o sintaxă specială. Figuring out the problem took only a few minutes, but remembering syntax is always easier if you write about it. Imaginind problema a durat doar câteva minute, dar amintindu-şi de sintaxă este întotdeauna mai uşor dacă aţi scrie despre el.
So yes, this post is solely for my benefit. Asa ca, da, acest post este numai pentru beneficiul meu. Hopefully it will help somebody else too. Sperăm că aceasta va ajuta altcineva de asemenea.
Let's say you want to find any fields that contain the text “100%”, so you put together this query: Să presupunem că doriţi să găsiţi orice câmpurile care conţin textul "100%", asa ca tu a pune împreună această interogare:
SELECT * FROM tablename WHERE fieldname LIKE '%100%%' SELECT * FROM TABLENAME% place unde fieldname '% 100%'
Instead of what you wanted, you'll get all the rows that contain “100″ as well as the rows that contain “100%”. În loc de ceea ce ai vrut, veţi obţine toate rândurile care conţin "100", precum şi rândurile care conţin "100%".
The problem here is that SQL Server uses the percent sign, underscore, and square brackets as special characters. Problema aici este că SQL Server foloseşte semnul procent, de subliniere, şi parantezele pătrate ca caractere speciale. You simply can't use them as a plain character in a LIKE query without escaping them. Puteţi pur şi simplu nu le pot utiliza ca un personaj simplu într-o interogare SIMILAR, fără a scăpa de ele.
Square Bracket Escape Square Bracket Escape
You can surround the % or _ with square brackets to tell SQL Server that the character inside is a regular character. Aveţi posibilitatea să înconjoară% sau _ cu paranteze drepte să-ţi spun SQL Server care personajul din interiorul este un caracter regulat.
SELECT * FROM tablename WHERE fieldname LIKE '%100[%]%' SELECT * FROM TABLENAME% place unde fieldname "100 [%]%'
T-SQL ESCAPE Syntax T-SQL ESCAPE Sintaxa
Alternatively, you can append the ESCAPE operator onto your query, and add a \ character before the value you want to escape. Alternativ, puteţi adăuga operatorul ESCAPE pe interogare, şi a adăuga un caracter \ înainte de valoarea pe care doriţi să scape.
SELECT * FROM tablename WHERE fieldname LIKE '%100\%%' ESCAPE '\' SELECT * FROM TABLENAME% place unde fieldname "100% \% 'ESCAPE' \ '
The ESCAPE '\' part of the query tells the SQL engine to interpret the character after the \ as a literal character instead of as a wildcard. ESCAPE '\' o parte din interogarea spune motorul SQL pentru a interpreta caracterul după \ ca un personaj literală în loc de ca un wildcard.
Personally I find the second method easier to deal with, and you can use it to escape a square bracket as well. Personal, mi se pare a doua metodă mai uşor pentru a face faţă, şi îl puteţi folosi pentru a scăpa o categorie de pătrat, de asemenea.

Daily Email Updates Daily Actualizări de email
You can get our how-to articles in your inbox each day for free. Aveţi posibilitatea să obţineţi modul nostru de-a articole în Inbox în fiecare zi pentru drum liber. Just enter your name and email below: Doar introduceţi numele dvs. şi e-mail de mai jos:



thanks for the GREAT post! Multumesc pentru mare post! Very useful… Foarte util ...
This write up was extremely beneficial for me . Acest lucru a scrie sus a fost extrem de benefic pentru mine. Thanks for writing it. Vă mulţumim pentru scris-o. Keep it up. Keep it up.