Position SUBSTRING
Sous une forme positionnelle simple (avec FROM
), cette fonction renvoie une sous-chaîne commençant à la position du caractère startpos (la position du premier caractère est 1). Sans l’argument FOR
, il retourne tous les caractères restants dans la chaîne.Avec FOR, il renvoie les caractères longueur ou le reste de la chaîne, selon ce qui est le plus court.
A partir de Firebird 4.0, startpos peut être inférieur à 1.Lorsque startpos est inférieur à 1, la sous-chaîne se comporte comme si elle avait un 1 - startpos
supplémentaire devantle premier caractère réel à la position 1
.La valeur de length est comptée à partir de ce début imaginaire de la chaîne, donc la chaîne résultante peut être plus courte que la length spécifiée ou même vide.
La fonction prend entièrement en charge les BLOB binaires et textuels de n’importe quelle longueur et avec n’importe quel jeu de caractères.Si le paramètre str est de type BLOB
, le résultat sera également de type BLOB
.Pour tout autre type, le résultat est de type VARCHAR
.
Pour un paramètre d’entrée str qui n’est pas BLOB
, la longueur du résultat de la fonction sera toujours égale à la longueur de la chaîne str, quelles que soient les valeurs des paramètres startpos et length.
SUBSTRING
select substring('abcdef' from 1 for 2) from rdb$database;
-- Résultat: 'ab'
select substring('abcdef' from 2) from rdb$database;
-- Résultat: 'bcdef'
select substring('abcdef' from 0 for 2) from rdb$database;
-- Résultat: 'a'
-- pas "ab", car il n'y a pas de "rien" en position 0
select substring('abcdef' from -5 for 2) from rdb$database;
-- Résultat: ''
-- la longueur se termine avant le début réel de la ligne
SUBSTRING
par une expression régulière
La fonction SUBSTRING
avec une expression régulière (avec SIMILAR
) retourne une partie d’une chaîne de caractères correspondant au modèle d’expression régulière du SQL. Si aucune correspondance n’est trouvée, NULL
est retourné.
Le motif SIMILAR
est formé de trois motifs d’expression régulière SQL : R1, R2 et R3. Le modèle complet a la forme R1 || '<escape>' || R2 || '<escape>' || R3
, où <escape> est le caractère d’échappement défini dans la clause ESCAPE
.R2 est le motif qui correspond à la sous-chaîne à extraire et qui est entouré de guillemets doubles échappés (<escape>
, par exemple, #"
avec le caractère d’échappement ‘`#’). R1 correspond au préfixe de la chaîne, et R3 au suffixe de la chaîne. R1 et R3 sont tous deux facultatifs (ils peuvent être vides), mais le motif doit correspondre à la chaîne entière. En d’autres termes, il ne suffit pas de spécifier un motif qui ne trouve qu’une sous-chaîne à extraire.
Tip
|
Les guillemets doubles échappés autour de R2 peuvent être comparés à la définition d’un groupe de capture unique dans une syntaxe d’expression régulière plus commune telle que PCRE. C’est-à-dire que le motif complet est équivalent à La valeur de retour correspond à la partie R2 de l’expression régulière. Pour cette valeur, l’expression est vraie.
|
Note
|
Si une partie d’un motif de R1, R2 ou R3 n’est pas une chaîne vide et n’a pas de format d’expression régulière SQL, une exception est levée. |
Le format complet des instructions SQL régulières est décrit dans le document suivant Syntaxe des expressions régulières SQL.
SUBSTRING
avec des expressions régulièresSUBSTRING('abcabc' SIMILAR 'a#"bcab#"c' ESCAPE '#') -- bcab
SUBSTRING('abcabc' SIMILAR 'a#"%#"c' ESCAPE '#') -- bcab
SUBSTRING('abcabc' SIMILAR '_#"%#"_' ESCAPE '#') -- bcab
SUBSTRING('abcabc' SIMILAR '#"(abc)*#"' ESCAPE '#') -- abcabc
SUBSTRING('abcabc' SIMILAR '#"abc#"' ESCAPE '#') -- <null>