FirebirdSQL logo

SUBSTRING()

Disponible en

DSQL, PSQL

Syntaxe
SUBSTRING (<substring-args>)

<substring-args> ::=
    str FROM startpos [FOR length]
  | str SIMILAR <similar_pattern> ESCAPE <escape>

<similar-pattern> ::=
  <similar-pattern-R1>
  <escape>"<similar pattern_R2><escape>"
  <similar pattern-R3>
Table 1. paramètres de fonction SUBSTRING
Paramètre Description

str

Une expression de type chaîne de caractères.

startpos

La position à laquelle l’extraction de la sous-chaîne commence. Expression entière.

length

Longueur de la sous-chaîne retournée. Expression entière.

similar-pattern

Le modèle de l’expression SQL régulière utilisée pour rechercher la sous-chaîne.

escape

Symbole d’échappement

Le type de résultat renvoyé :

VARCHAR ou BLOB

La fonction SUBSTRING renvoie une sous-chaîne de caractères à partir d’une position donnée jusqu’à la fin de la chaîne ou jusqu’à une longueur spécifiée, ou extrait une sous-chaîne en utilisant un motif SQL régulier.

Si l’un des paramètres d’entrée est défini comme NULL, le résultat sera également défini comme NULL.

Warning

Lorsque vous utilisez BLOB dans les paramètres d’une fonction, il peut être nécessaire de charger l’objet entier en mémoire. Avec de grandes quantités de BLOB, il peut y avoir des pertes de performance.

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.

Example 1. Utilisation de la fonction 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 à R1(R2)R3, qui doit correspondre à la chaîne d’entrée entière, et le groupe de capture est la sous-chaîne de retour.

La valeur de retour correspond à la partie R2 de l’expression régulière. Pour cette valeur, l’expression est vraie.

str SIMILAR TO R1 || R2 || R3 ESCAPE <escape>
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.

Example 2. Utilisation de la fonction SUBSTRING avec des expressions régulières
SUBSTRING('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>