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

Beachten Sie, dass die Funktion CHARINDEX keine der Syntaxvarianten unterstützt, die von POSITION unterstützt werden.

Syntax

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

POSITION( <expr1> IN <expr2> )
Copy

Argumente

Benötigt:

expr1

Eine Zeichenfolge- oder ein Binärausdruck, der den zu suchenden Wert darstellt.

expr2

Eine Zeichenfolge- oder ein Binärausdruck, der den zu suchenden Wert darstellt.

Optional:

start_pos

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

Standard: 1

Nutzungshinweise

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

  • Wenn der Zeichenfolgen- oder Binärwert nicht gefunden wird, wird 0 zurückgegeben.

  • Wenn die angegebene optionale start_pos hinter dem Ende des zweiten Arguments (der zu suchenden Zeichenfolge) 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 müssen gleich sein, entweder sind beide vom Typ Zeichenfolge oder vom Typ Binärwert.

Sortierungsdetails

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

  • pi (ohne Beachtung der Interpunktion)

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

Bemerkung

Um diese Funktion mit einer Spalte zu verwenden, die die Sortierungsspezifizierer upper oder lower aufweist, müssen Sie Verhaltensänderungs-Bundle 2024_02 in Ihrem Konto aktivieren.

Um dieses Bundle in Ihrem Konto zu aktivieren, führen Sie die folgende Anweisung aus:

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy

Beispiele

VARCHAR-Ausdrücke

Suchen Sie das erste Vorkommen von „an“ in „banana“:

select position('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
|                           2 |
+-----------------------------+
Copy

Suchen Sie das erste Vorkommen von „an“ in „banana“ bei oder nach Position 3. Bei dieser Suche wird das zweite Vorkommen von „an“ gefunden.

select position('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
|                           4 |
+-----------------------------+
Copy

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 |
+--------+---------------------+------------------+
Copy

BINARY-Ausdrücke

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', X'ABCDEF') |
|----------------------------|
|                          3 |
+----------------------------+
Copy

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', X'ABCD') |
|--------------------------|
|                        0 |
+--------------------------+
Copy