- 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.
Wenn Sie die Position nach dem ersten Vorkommen suchen müssen (z. B. das dritte Vorkommen), können Sie die Funktion REGEXP_INSTR verwenden.
- Aliasse:
-
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> )
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, an der die Suche gestartet werden soll (wobei
1
den Beginn vonexpr2
darstellt).Standard:
1
Rückgabewerte¶
Gibt einen Wert vom Typ NUMBER zurück.
Wenn eines der Argumente NULL ist, gibt die Funktion NULL zurück.
Nutzungshinweise¶
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, wird0
zurückgegeben.Wenn das erste Argument leer ist (z. B. eine leere Zeichenfolge), gibt die Funktion
1
zurück.Die Datentypen der ersten beiden Argumente müssen identisch sein (entweder zwei Zeichenfolgen oder zwei binäre Werte).
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)
Beispiele¶
Die folgenden Beispiele verwenden die Funktion POSITION.
VARCHAR-Ausdrücke¶
Suchen Sie das erste Vorkommen von „an“ in „banana“:
SELECT POSITION('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
| 2 |
+-----------------------------+
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 |
+-----------------------------+
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 |
+--------+---------------------+------------------+
BINARY-Ausdrücke¶
Ein einzelnes BINARY-Byte wird als zwei hexadezimale Ziffern dargestellt wird, da die folgenden Werte hexadezimale Darstellungen sind.
In diesem Beispiel lautet der Rückgabewert 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 |
+----------------------------+
In diesem Beispiel gibt es keine Übereinstimmung. Obwohl die Folge „BC“ in dem gesuchten Wert zu liegen scheint, ist „B“ das zweite Element des ersten Bytes und das „C“ das erste Element des zweiten Bytes. Kein Byte enthält tatsächlich „BC“, daher lautet der Rückgabewert 0
(nicht gefunden).
SELECT POSITION(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
| 0 |
+--------------------------+