- Catégories :
Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)
POSITION¶
Recherche la première occurrence du premier argument dans le deuxième argument et, si cela aboutit, retourne la position (basée sur 1) du premier argument dans le deuxième argument.
Si vous devez trouver la position au-delà de la première occurrence (par exemple, la troisième occurrence), vous pouvez utiliser la fonction REGEXP_INSTR.
- Alias:
-
Notez que la fonction CHARINDEX ne prend pas en charge l’une des variations syntaxiques que la fonction POSITION prend en charge.
Syntaxe¶
POSITION( <expr1>, <expr2> [ , <start_pos> ] )
POSITION( <expr1> IN <expr2> )
Arguments¶
Obligatoire :
expr1
Une chaîne de caractères ou une expression binaire représentant la valeur à rechercher.
expr2
Une chaîne de caractères ou une expression binaire représentant la valeur à rechercher.
Facultatif :
start_pos
Un nombre indiquant la position à partir de laquelle commencer la recherche (avec
1
représentant le début deexpr2
).Par défaut :
1
Renvoie¶
La fonction renvoie une valeur de type NUMBER.
Si l’un des arguments est NULL, la fonction renvoie NULL.
Notes sur l’utilisation¶
Si la chaîne ou la valeur binaire est introuvable, la fonction renvoie
0
.Si
start_pos
facultatif spécifié se situe au-delà de la fin du deuxième argument (la chaîne que nous recherchons), la fonction renvoie0
.Si le premier argument est vide (par exemple, une chaîne vide), la fonction renvoie
1
.Les types de données des deux premiers arguments doivent être les mêmes (deux chaînes ou deux valeurs binaires).
Détails du classement¶
Cette fonction ne fonctionne pas avec les spécifications de classement suivantes :
pi
(insensible à la ponctuation).cs-ai
(sensible à la casse, insensible aux accents)
Exemples¶
Les exemples suivants utilisent la fonction POSITION.
Expressions VARCHAR¶
Trouver la première occurrence de « an » dans « banane » :
SELECT POSITION('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
| 2 |
+-----------------------------+
Trouver la première occurrence de « an » dans « banane » à la position 3 ou après. Cette recherche trouve la deuxième occurrence de « an ».
SELECT POSITION('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
| 4 |
+-----------------------------+
Rechercher différents caractères, y compris les caractères Unicode, dans des chaînes :
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 |
+--------+---------------------+------------------+
Expressions BINARY¶
Comme les valeurs ci-dessous sont des représentations hexadécimales, un seul octet BINARY est représenté par deux chiffres hexadécimaux.
Dans cet exemple, la valeur renvoyée est 3
car « EF » correspond au 3e octet (le premier octet est « AB » ; le deuxième octet est « CD » et le troisième octet est « EF ») :
SELECT POSITION(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
| 3 |
+----------------------------+
Dans cet exemple, il n’y a pas de correspondance. Bien que la séquence « BC » semble être dans la valeur recherchée, le « B » est le deuxième nybble du premier octet et le « C » est le premier nybble du deuxième octet. Aucun octet ne contient réellement « BC », donc la valeur renvoyée est 0
(introuvable).
SELECT POSITION(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
| 0 |
+--------------------------+