Cette section décrit les fonctions et opérateurs pour l'examen et la
manipulation de valeurs de type chaîne de caractères. Dans ce contexte,
les chaînes incluent les valeurs de type character
,
character varying
et text
. Sauf note explicite,
ces fonctions et opérateurs sont déclarés comme acceptant et renvoyant le
type text
. Ils accepteront directement des arguments de type
character varying
. Les valeurs de type character
seront converties en text
avant que la fonction ou
l'opérateur ne soit exécuté, résultant en une suppression des espaces en
fin de la valeur de type character
.
Le standard SQL définit certaines fonctions de chaîne de caractères comme utilisant des mots clés plutôt que des virgules pour séparer les arguments. Les détails sont disponibles dans Tableau 9.9. PostgreSQL fournit aussi des versions de ces fonctions qui utilisent la syntaxe d'appel de fonctions standards (voir Tableau 9.10).
L'opérateur de concaténation (||
) acceptera
les entrées qui ne sont pas de type chaîne, tant qu’au moins une entrée est de type chaîne,
comme indiqué dans Tableau 9.9. Dans d'autres cas, le fait d'ajouter
une conversion explicite en text
peut faire accepter les entrées qui ne sont pas
de type chaîne.
Tableau 9.9. Fonctions et opérateurs SQL pour les chaînes de caractères
Fonction/Opérateur Description Exemple(s) |
---|
Concatène deux chaînes de caractères.
|
Supprime la plus longue chaîne contenant seulement les caractères
compris dans
|
Convertit l'argument qui n'est pas une chaîne de caractère en texte,
puis concatène les deux chapines. (L'argument qui n'est pas une chaîne
ne peut pas être un tableau car cela causerait une ambiguité avec les
opérateurs
|
Vérifie si la chaîne est dans la forme de normalisation Unicode
précisée. Le mot clé optionnel
|
Renvoie le nombre de bits dans la chaîne de caractères (8
fois la valeur de
|
Renvoie le nombre de caractères dans la chaîne.
|
Convertit la chaîne en minuscule, suivant les règles de la locale de la base de données.
|
Étend la chaîne
|
Supprime la chaîne la plus longue contenant seulement les caractères
dans
|
Convertit la chaîne vers la forme de normalisation Unicode précisée.
Le mot clé optionnel
|
Renvoie le nombre d'octets dans la chaîne.
|
Renvoie le nombre d'octets dans la chaîne. Comme cette version de la
fonction accepte directement le type
|
Remplace la sous-chaîne de
|
Renvoie le premier index de début de la chaîne
|
Étend
|
Supprime la plus longue chaîne contenant seulement les caractères
compris dans
|
Extrait la sous-chaîne de
|
Extrait la première sous-chaîne correspondant à une expression rationnelle POSIX ; voir Section 9.7.3.
|
Extrait la première sous-chaîne correspondant à l'expression rationnelle SQL ; voir Section 9.7.2. La première forme a été spécifiée depuis SQL:2003 ; la seconde forme n'existe que dans SQL:1999 et doit être considérée comme obsolète.
|
Supprime la chaîne la plus longue contenant seulement des caractères
parmi
|
Ceci est la syntaxe non standard pour
|
Convertit la chaîne en majuscule, suivant les règles de la locale de la base de données.
|
Des fonctions et opérateurs supplémentaires de manipulation des chaînes de caractères sont disponibles et listées dans Tableau 9.10. Certaines sont utilisées en interne pour implémenter les fonctions de chaîne du standard SQL listées dans Tableau 9.9. Il existe aussi des opérateurs de correspondance de motif, décrits dans Section 9.7, et des opérateurs operators de recherche plein texte, décrits dans Chapitre 12.
Tableau 9.10. Autres fonctions et opérateurs pour les chaînes de caractères
Fonction / Opérateur Description Exemple(s) |
---|
Renvoie true si la première chaîne commence avec la deuxième chaîne
(équivalent à la fonction
|
Renvoie le code numérique du premier caractère de l'argument. Dans l'encodage UTF8, renvoie le point code Unicode du caractère. Dans les autres encodages multioctets, l'argument doit être un caractère ASCII.
|
Renvoie le caractère avec le code donné. Dans l'encodage
UTF8, l'argument est traité qu'un point code
Unicode. Dans les autres encodages multi-octets, l'argument doit
désigner un caractère ASCII.
|
Concatène les représentations textuelles de tous les arguments. Les arguments NULL sont ignorés.
|
Concatène tous les arguments sauf le premier, avec des séparateurs. Le premier argument est utilisé comme séparateur, et ne doit pas valoir NULL. Les autres arguments NULL sont ignorés.
|
Formate les arguments suivant une chaîne de formatage ; voir
Section 9.4.1. Cette fonction est
similaire à la fonction C
|
Convertit la première lettre de chaque mot en majuscule et le reste en minuscule. Les mots sont des séquences de caractères alpha-numériques séparées par des caractères non alpha-numériques.
|
Renvoie les
|
Renvoie le nombre de caractères dans la chaîne.
|
Calcule le hachage MD5 de l'argument, le résultat étant écrit en hexadécimal.
|
Divise
|
Renvoie le nom de l'encodage client actuel.
|
Renvoie la chaîne donnée correctement placée entre guillemets comme un identifiant dans une requête SQL. Les guillemets ne sont ajoutés que s'ils sont nécessaires (c'est-à-dire si la chaîne contient des caractères qui ne font pas partie de ceux autorisés habituellement pour les identifiants ou des caractères majuscules). Les guillemets dans le nom sont aussi doublés. Voir aussi Exemple 43.1.
|
Renvoie la chaîne donnée correctement placée entre guillemets pour
être utilisé comme une valeur littérale de type chaîne dans une requête
SQL. Les guillemets simples et antislashs présents
dans la chaîne sont correctement doublés. Il faut noter que
|
Convertit la valeur donnée dans le type text et ajoute des guillemets comme pour une valeur. Les guillemets simples et antislashs présents dans la chaîne sont correctement doublés.
|
Renvoie la chaîne donnée convenablement placée entre guillemets pour
être utilisée comme un littéral de type chaîne dans une requête
SQL ; ou, si l'argument vaut NULL, renvoie
|
Convertit la valeur donnée dans le type text puis la place entre
guillemets comme une valeur littérale ; ou, si l'argument vaut
NULL, renvoie
|
Renvoie le nombre de fois où l'expression rationnelle POSIX
|
Renvoie la position dans
|
Vérifie si une correspondance de l'expression rationnelle
POSIX
|
Renvoie les sous-chaînes dans la première correspondance de l'expression
rationnelle POSIX
|
Renvoie les sous-chaînes dans la première correspondance de l'expression
rationnelle POSIX
{bar} {baz}
|
Remplace la sous-chaîne qui est la première correspondance de
l'expression rationnelle POSIX
|
Remplace la sous-chaîne qui est la
|
Divise
|
Divise
hello world
|
Renvoie la sous-chaîne de
|
Répète
|
Remplace toutes les occurrences dans
|
Inverse l'ordre des caractères dans la chaîne.
|
Renvoie les
|
Divise
|
Renvoie true si
|
Divise
|
Divise
xx NULL zz
|
Renvoie la première position du
|
Extrait la sous-chaîne de
|
Convertit
|
Convertit le nombre en sa représentation hexadécimale équivalente.
|
Remplace chaque caractère de
|
Évalue les caractères Unicode échappés dans l'argument. Les caractères Unicode
peuvent être spécifiés comme
Si l'encodage du serveur n'est pas UTF-8, le code Unicode identifié par une de ces séquences échappées est converti dans l'encodage actuel du serveur ; une erreur est retournée quand la conversion n'est pas possible. Cette fonction founit une alternative (non standard) aux constantes de type chaîne avec des échappements en Unicode (voir Section 4.1.2.3).
|
Les fonctions concat
, concat_ws
et format
ont un nombre d'arguments variables, donc
il est possible de passer les valeurs à concaténer ou à formater sous la
forme d'un tableau marqué avec le mot-clé VARIADIC
(voir Section 38.5.6). Les éléments du
tableau sont traités comme s'ils étaient des arguments séparés dans la
fonction. Si l'argument tableau est NULL, concat
et
concat_ws
renvoient NULL, mais
format
traite un NULL comme un tableau à zéro
élément.
Voir aussi la fonction d'agrégat string_agg
in Section 9.21, et les fonctions de conversions entre des
chaînes de caractères et le type bytea
dans Tableau 9.13.
format
#
La fonction format
produit une sortie formatée
suivant une chaîne de formatage, dans un style similaire à la fonction C
sprintf
.
format
(formatstr
text
[,formatarg
"any"
[, ...] ])
formatstr
est une chaîne de formatage qui indique
comment le résultat doit être formaté. Le texte de la chaîne de formatage
est copié directement dans le résultat, à l'exception des
jokers de format. Les jokers de format agissent
comme des espaces réservés dans le chaîne définissant comment les
arguments de la fonction doivent être formatés et insérés dans le
résultat. Chaque argument formatarg
est converti
en texte suivant les règles d'affichage habituel pour son type de
données, puis formaté et inséré dans la chaîne résultante suivant le
joker de format.
Les jokers de format commencent par un caractère %
et ont la forme
suivante
%[position
][flags
][width
]type
où les champs composants sont :
position
(optionnel)
Une chaîne de la forme
où n
$n
est l'index de l'argument à afficher.
L'index 1 correspond au premier argument après
formatstr
. Si position
est omis, la valeur par défaut est d'utiliser le prochain argument en
séquence.
flags
(optionnel)
Des options supplémentaires contrôlant comme la sortie du joker est
formatée. Actuellement, le seul drapeau supporté est un signe moins
(-
) qui causera l'alignement à gauche de la valeur
du champ. Ceci n'a d'effet que si width
est
précisé.
width
(optionnel)
Indique le nombre minimum de caractères à
utiliser pour afficher la sortie du joker. La sortie est remplie à
gauche ou à droite (suivant la présence du drapeau
-
) avec autant d'espaces que nécessaire pour
remplir la largeur indiquée. Une largeur trop petite ne cause pas la
trincature de la sortie, mais est tout simplement ignorée. La largeur
pourrait être indiquée en utilisant soit un entier positif, soit une
astérisque (*
) pour utiliser le prochain argument
de la fonction soit une chaîne de la forme
*
pour utiliser le
n
$n
-ième argument de la fonction comme
information de largeur.
Si la largeur vient d'un argument de la fonction, cet argument est
consommé avant l'argument utilisé pour la valeur du joker de format.
Si l'argument de largeur est négatif, le résultat est un alignement à
gauche (comme si le drapeau -
avait été précisé) à
l'intérieur du champ de longueur
abs
(width
).
type
(requis)Le type de conversion de format à utiliser pour produire le résultat du joker de format. Les types suivants sont supportés :
s
formate ma valeur en argument comme une
simple chaîne. Une valeur NULL est traitée comme une chaîne vide.
I
traite la valeur en argument comme un
identifiant SQL, la plaçant entre guillemets doubles si
nécessaire. Une valeur NULL est traitée comme une erreur
(équivalent à quote_ident
).
L
traite la valeur en argument comme un
littérale SQL. Une valeur NULL est affichée comme la chaîne
NULL
, sans guillemets (équivalent à
quote_nullable
).
En plus des jokers de format décrits ci-dessus, la séquence spéciale
%%
est utilisable pour ajouter un caractère
%
.
Voici quelques exemples des conversions basiques de format :
SELECT format('Hello %s', 'World'); Résultat :Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); Résultat :Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); Résultat :INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); Résultat :INSERT INTO locations VALUES('C:\Program Files')
Voici quelques exemples d'utilisation du champ
width
et du drapeau -
:
SELECT format('|%10s|', 'foo'); Résultat :| foo|
SELECT format('|%-10s|', 'foo'); Résultat :|foo |
SELECT format('|%*s|', 10, 'foo'); Résultat :| foo|
SELECT format('|%*s|', -10, 'foo'); Résultat :|foo |
SELECT format('|%-*s|', 10, 'foo'); Résultat :|foo |
SELECT format('|%-*s|', -10, 'foo'); Résultat :|foo |
Ces exemples montrent l'utilisation du champ
position
:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); Résultat :Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar'); Résultat :| bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); Résultat :| foo|
Contrairement à la fonction C standard sprintf
, la
fonction format
de
PostgreSQL autorise les jokers de format sans
et avec des champs position
mixés dans la même
champs de formatage. Un joker de format sans champ
position
utilise toujours le prochain argument
après le dernier argument consommé. De plus, la fonction
format
ne requiert pas que tous les arguments de la
fonction soient utilisés dans la chaîne de format. Par exemple :
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
Résultat : Testing three, two, three
Les jokers de format %I
et %L
sont
particulièrement utiles pour construire en toute sécurité des requêtes
SQL dynamiques. Voir Exemple 43.1.