webentwicklung-frage-antwort-db.com.de

Liste der Sonderzeichen für die SQL LIKE-Klausel

Was ist die vollständige Liste aller Sonderzeichen für eine SQL-Klausel?

Z.B.

SELECT Name FROM Person WHERE Name LIKE '%Jon%'

SQL Server :

  1. %
  2. _
  3. [Spezifizierer] z.B. [a-z]
  4. [^ spezifizierer]
  5. ESCAPE-Klausel, z. % 30! %% 'ESCAPE'! ' bewertet 30% als wahr
  6. 'Zeichen müssen mit einem Escapezeichen versehen werden, z. Sie werden sie

MySQL:

  1. % - Beliebige Zeichenfolge mit null oder mehr Zeichen.
  2. _ - Beliebiges einzelnes Zeichen
  3. ESCAPE-Klausel, z. % 30! %% 'ESCAPE'! ' bewertet 30% als wahr

Oracle:

  1. % - Beliebige Zeichenfolge mit null oder mehr Zeichen.
  2. _ - Beliebiges einzelnes Zeichen
  3. ESCAPE-Klausel, z. % 30! %% 'ESCAPE'! ' bewertet 30% als wahr

Sybase

  1. %
  2. _
  3. [Spezifizierer] z.B. [a-z]
  4. [^ spezifizierer]

Fortschritt:

  1. % - Beliebige Zeichenfolge mit null oder mehr Zeichen.
  2. _ - Beliebiges einzelnes Zeichen

    Referenzhandbuch hier [PDF]

PostgreSQL:

  1. % - Beliebige Zeichenfolge mit null oder mehr Zeichen.
  2. _ - Beliebiges einzelnes Zeichen
  3. ESCAPE-Klausel, z. % 30! %% 'ESCAPE'! ' bewertet 30% als wahr

ANSI SQL92:

  1. %
  2. _
  3. Ein ESCAPE-Zeichen nur wenn angegeben.

PostgreSQL hat auch die SIMILAR TO -Operator, der Folgendes hinzufügt:

  1. [specifier]
  2. [^specifier]
  3. | - eine von zwei Alternativen
  4. * - Wiederholung des vorherigen Punktes null oder mehrmals.
  5. + - ein- oder mehrmalige Wiederholung des vorherigen Punktes.
  6. () - Elemente zusammen gruppieren

Die Idee ist, dies zu einem Community-Wiki zu machen, das dazu ein "One-Stop-Shop" werden kann.

113
Jonathan Parker

Für SQL Server von http://msdn.Microsoft.com/en-us/library/ms179859.aspx :

  • % Beliebige Zeichenfolge mit null oder mehr Zeichen.

    WHERE title LIKE '%computer%' findet alle Buchtitel mit dem Wort "Computer" irgendwo im Buchtitel.

  • _ Beliebiges einzelnes Zeichen.

    WHERE au_fname LIKE '_ean' findet alle Vornamen mit vier Buchstaben, die auf ean enden (Dean, Sean usw.).

  • [] Beliebiges einzelnes Zeichen innerhalb des angegebenen Bereichs ([a-f]) oder Satzes ([abcdef]).

    WHERE au_lname LIKE '[C-P]arsen' findet Nachnamen des Autors, die mit arsen enden und mit einem einzelnen Zeichen zwischen C und P beginnen, z. B. Carsen, Larsen, Karsen usw. Bei der Bereichssuche können die Zeichen im Bereich abhängig von den Sortierregeln der Sortierung variieren.

  • [^] Ein einzelnes Zeichen, das nicht im angegebenen Bereich ([^ a-f]) oder Satz ([^ abcdef]) liegt.

    WHERE au_lname LIKE 'de[^l]%' Alle Nachnamen des Autors, die mit de beginnen und bei denen der folgende Buchstabe nicht l ist.

21
Çağdaş Tekin

ANSI SQL92 :

  • %
  • _
  • ein ESCAPE-Zeichen nur wenn angegeben.

Es ist enttäuschend, dass sich viele Datenbanken nicht an die Standardregeln halten und zusätzliche Zeichen hinzufügen oder ESCAPE fälschlicherweise mit einem Standardwert von "\" aktivieren, wenn dieser fehlt. Als hätten wir noch nicht genug Probleme mit "\"!

Es ist unmöglich, DBMS-unabhängigen Code hier zu schreiben, da Sie nicht wissen, welche Zeichen Sie entkommen müssen, und der Standard besagt, dass Sie nicht entkommen können, wenn Sie nicht entkommen müssen. (Siehe Abschnitt 8.5/Allgemeine Regeln/3.a.ii.)

Vielen Dank, dass Sie SQL! gnnn

6
bobince

Sie sollten hinzufügen, dass Sie in SQL Server ein zusätzliches "Escape" hinzufügen müssen:

schmiede -> Schmiede

5
Heather M

Sybase:

%              : Matches any string of zero or more characters.
_              : Matches a single character.
[specifier]    : Brackets enclose ranges or sets, such as [a-f] 
                 or [abcdef].Specifier  can take two forms:

                 rangespec1-rangespec2: 
                   rangespec1 indicates the start of a range of characters.
                   - is a special character, indicating a range.
                   rangespec2 indicates the end of a range of characters.

                 set: 
                  can be composed of any discrete set of values, in any 
                  order, such as [a2bR].The range [a-f], and the 
                  sets [abcdef] and [fcbdae] return the same 
                  set of values.

                 Specifiers are case-sensitive.

[^specifier]    : A caret (^) preceding a specifier indicates 
                  non-inclusion. [^a-f] means "not in the range 
                  a-f"; [^a2bR] means "not a, 2, b, or R."
1
Learning

Mögliche Antwort für SQL Server

Interessant Ich habe gerade einen Test mit LinqPad mit SQL Server durchgeführt, unter dem nur Linq to SQL ausgeführt werden sollte, und es wird die folgende SQL-Anweisung generiert.

Zeichnet auf .Where (r => r.Name.Contains ("lkjwer --_ ~ []"))

-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'

Ich habe es also noch nicht getestet, aber es sieht so aus, als ob das Schlüsselwort ESCAPE '~' Möglicherweise ein automatisches Escapezeichen für eine Zeichenfolge zur Verwendung in einem ähnlichen Ausdruck zulässt.

0
jpierson