Jaka jest pełna lista wszystkich znaków specjalnych dla SQL (interesuje mnie SQL Server, ale inne też byłyby dobre) klauzula LIKE?
Na przykład
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
- %
- _
- [specyfikator] Np. [az]
- [^ specyfikator]
- Klauzula ESCAPE Np.% 30! %% 'ESCAPE'! ' uzna 30% za prawdziwe
- „postaciom trzeba uciec z„ Np. stają się ”
%
- Dowolny ciąg zawierający zero lub więcej znaków._
- Dowolny pojedynczy znak- Klauzula ESCAPE Np.% 30! %% 'ESCAPE'! ' uzna 30% za prawdziwe
%
- Dowolny ciąg zawierający zero lub więcej znaków._
- Dowolny pojedynczy znak- Klauzula ESCAPE Np.% 30! %% 'ESCAPE'! ' uzna 30% za prawdziwe
Sybase
- %
- _
- [specyfikator] Np. [az]
- [^ specyfikator]
%
- Dowolny ciąg zawierający zero lub więcej znaków._
- Dowolny pojedynczy znak
%
- Dowolny ciąg zawierający zero lub więcej znaków._
- Dowolny pojedynczy znak- Klauzula ESCAPE Np.% 30! %% 'ESCAPE'! ' uzna 30% za prawdziwe
- %
- _
- Znak ESCAPE tylko wtedy, gdy jest określony .
PostgreSQL ma również SIMILAR TO
operator, który dodaje następujące elementy:
[specifier]
[^specifier]
|
- jedną z dwóch możliwości*
- powtórzenie poprzedniej pozycji zero lub więcej razy.+
- powtórzenie poprzedniej pozycji raz lub więcej razy.()
- grupuj elementy razem
Chodzi o to, aby uczynić z tego Wiki społeczności, która może stać się „punktem kompleksowej obsługi”.
sql
special-characters
sql-like
a_horse_with_no_name
źródło
źródło
LIKE
; na przykładWHERE familyname = 'O''Toole'
. Po trzecie,SIMILAR TO
operator wprowadza rodzaj hybrydowego wyrażenia regularnego, które ma swoje własne cechy (i wiele innych znaków specjalnych), więc prawdopodobnie nie powinno być tutaj zawarte. Myślę, że to 3 komentarze, ale nikt nie oczekuje hiszpańskiej inkwizycji.Odpowiedzi:
W przypadku programu SQL Server ze strony http://msdn.microsoft.com/en-us/library/ms179859.aspx :
% Dowolny ciąg zawierający zero lub więcej znaków.
WHERE title LIKE '%computer%'
znajduje wszystkie tytuły książek ze słowem „komputer” w dowolnym miejscu tytułu._ Dowolny pojedynczy znak.
WHERE au_fname LIKE '_ean'
wyszukuje wszystkie czteroliterowe imiona kończące się na ean (Dean, Sean itd.).[] Dowolny pojedynczy znak w określonym zakresie ([af]) lub zestawie ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen'
wyszukuje nazwiska autorów kończące się na arsen i zaczynające się dowolnym pojedynczym znakiem między C a P, na przykład Carsen, Larsen, Karsen itd. W wyszukiwaniu według zakresu znaki zawarte w zakresie mogą się różnić w zależności od reguł sortowania.[^] Dowolny pojedynczy znak spoza określonego zakresu ([^ af]) lub zestawu ([^ abcdef]).
WHERE au_lname LIKE 'de[^l]%'
wszystkie nazwiska autorów zaczynające się od de i gdzie następną literą nie jest l.źródło
ANSI SQL92 :
Rozczarowuje fakt, że wiele baz danych nie przestrzega standardowych zasad i dodaje dodatkowe znaki lub nieprawidłowo włącza ESCAPE z domyślną wartością „\”, gdy jej brakuje. Jakby nie mamy już wystarczająco dużo problemów z '\'!
Niemożliwe jest tutaj napisanie kodu niezależnego od DBMS, ponieważ nie wiesz, jakich znaków będziesz musiał uciec, a standard mówi, że nie możesz uciec przed rzeczami, przed którymi nie trzeba uciekać. (Zobacz rozdział 8.5 / Zasady ogólne / 3.a.ii.)
Dziękuję SQL! gnnn
źródło
Należy dodać, że w SQL Server należy dodać dodatkowe słowo „aby uciec przed istniejącym”:
Smith's -> Smith's
źródło
Sybase:
źródło
Potencjalna odpowiedź dla programu SQL Server
Ciekawe Właśnie przeprowadziłem test używając LinqPad z SQL Server, który powinien po prostu uruchomić Linq to SQL pod spodem i generuje następującą instrukcję SQL.
Records .Where (r => r.Name.Contains ("lkjwer --_ ~ []"))
Więc jeszcze tego nie testowałem, ale wygląda na to, że potencjalnie
ESCAPE '~'
słowo kluczowe może pozwolić na automatyczne uciekanie łańcucha do użycia w podobnym wyrażeniu.źródło
ESCAPE
dlatego, że pozwalają na użycie dwóch znaków na znak ucieczki (np.%
Staje się~%
) zamiast trzech (np. BezESCAPE
,%
staje się[%]
).