Kategorien:

Zeichenfolgen- und Binärfunktionen (Abgleich/Vergleich)

POSITION

Sucht nach dem ersten Auftreten des ersten Arguments im zweiten Argument und gibt bei Erfolg die Position (1-basiert) des ersten Arguments im zweiten Argument zurück.

Aliasse

CHARINDEX

Syntax

POSITION( <expr1>, <expr2> [ , <start_pos> ] )

POSITION( <expr1> IN <expr2> )

Argumente

Benötigt:

Ausdruck1

Eine Zeichenfolge oder ein Binärausdruck, die bzw. der den gesuchten Wert darstellt.

Ausdruck2

Eine Zeichenfolge oder ein Binärausdruck, die bzw. der den Wert darstellt, in dem gesucht wird.

Optional:

Startposition

Eine Zahl, die die Position angibt, von der aus die Suche gestartet werden soll (wobei 1 den Beginn von Ausdruck2 darstellt).

Standard: 1

Nutzungshinweise

  • Wenn eines der Argumente NULL ist, wird NULL zurückgegeben.

  • Wenn die Zeichenfolge oder der Binärwert nicht gefunden werden, wird 0 zurückgegeben.

  • Wenn die angegebene optionale Startposition hinter dem Ende des zweiten Arguments (der Zeichenfolge, nach der gesucht wird) liegt, wird 0 zurückgegeben.

  • Wenn das erste Argument leer ist (z. B. eine leere Zeichenfolge), wird 1 zurückgegeben.

  • Die Datentypen der ersten beiden Argumente sollten gleich sein. Entweder sollten beide vom Typ Zeichenfolge oder vom Typ Binärwert sein.

Sortierungsdetails

Diese Funktion bietet keine Unterstützung für folgende Sortierungsspezifikationen:

  • lower.

  • upper.

  • pi (ohne Beachtung der Interpunktion)

  • cs-ai (Beachtung von Groß-/Kleinschreibung, keine Beachtung von Akzenten)

Beispiele

Suchen nach dem ersten Vorkommen von „uzzy“ in „fuzzy wuzzy“:

SELECT POSITION('uzzy', 'fuzzy wuzzy', 1);

+------------------------------------+
| POSITION('UZZY', 'FUZZY WUZZY', 1) |
|------------------------------------|
|                                  2 |
+------------------------------------+

Gleiches Beispiel wie zuvor, aber beginnend ab Position 5; so wird das zweite Vorkommen anstelle des ersten gefunden:

SELECT POSITION('uzzy', 'fuzzy wuzzy', 5);

+------------------------------------+
| POSITION('UZZY', 'FUZZY WUZZY', 5) |
|------------------------------------|
|                                  8 |
+------------------------------------+

Suchen Sie nach verschiedenen Zeichen, einschließlich Unicode-Zeichen, in Zeichenfolgen:

SELECT n, h, POSITION(n in h) FROM pos;

+--------+---------------------+------------------+
| N      | H                   | POSITION(N IN H) |
|--------+---------------------+------------------|
|        |                     |                1 |
|        | sth                 |                1 |
| 43     | 41424344            |                5 |
| a      | NULL                |             NULL |
| dog    | catalog             |                0 |
| log    | catalog             |                5 |
| lésine | le péché, la lésine |               14 |
| nicht  | Ich weiß nicht      |               10 |
| sth    |                     |                0 |
| ☃c     | ☃a☃b☃c☃d            |                5 |
| ☃☃     | bunch of ☃☃☃☃       |               10 |
| ❄c     | ❄a☃c❄c☃             |                5 |
| NULL   | a                   |             NULL |
| NULL   | NULL                |             NULL |
+--------+---------------------+------------------+

Suchen Sie nach Bytes in einem Binärwert. Beachten Sie, dass ein einzelnes BINARY-Byte als zwei hexadezimale Ziffern dargestellt wird, da die folgenden Werte hexadezimale Darstellungen sind.

In diesem Beispiel ist der zurückgegebene Wert 3, da „EF“ mit dem 3. Byte übereinstimmt (das erste Byte ist „AB“, das zweite Byte ist „CD“ und das dritte Byte ist „EF“):

SELECT POSITION(X'EF', X'ABCDEF');

+------------------------------+
| POSITION(X'EF' IN X'ABCDEF') |
|------------------------------|
|                            3 |
+------------------------------+

In diesem Beispiel gibt es keine Übereinstimmung. Obwohl die Folge „BC“ scheinbar in dem gesuchten Wert zu liegen scheint, ist „B“ das zweite Byte des ersten Bytes und „C“ das erste Element des zweiten Bytes. Kein Byte enthält tatsächlich „BC“, daher ist der zurückgegebene Wert 0 (nicht gefunden).

SELECT POSITION(X'BC', X'ABCD');

+----------------------------+
| POSITION(X'BC' IN X'ABCD') |
|----------------------------+
|                          0 |
+----------------------------+