- 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.
- 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
Notes sur l’utilisation¶
Si l’un des arguments est NULL, la fonction renvoie NULL.
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 devraient être les mêmes ; soit les deux arguments doivent être des chaînes, soit les deux arguments doivent être des 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)
Note
Pour utiliser cette fonction avec une colonne qui a les spécificateurs de classement upper
ou lower
, vous devez activer le bundle de changements de comportement 2024_02 dans votre compte.
Pour activer ce bundle dans votre compte, exécutez l’instruction suivante :
SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Exemples¶
Expression 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 | +--------+---------------------+------------------+
Expression BINARY¶
Notez que, 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 troisième 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”, la valeur renvoyée est donc 0 (introuvable).
select position(X'BC', X'ABCD'); +--------------------------+ | POSITION(X'BC', X'ABCD') | |--------------------------| | 0 | +--------------------------+