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).
Avant PostgreSQL 8.3, ces fonctions
acceptaient aussi silencieusement des valeurs de plusieurs types de
données qui ne sont pas des chaînes de caractères, grâce à la présente de
conversions implicites de ces types de données vers le type
text
. Ces conversions ont été supprimées parce qu'elles
causaient fréquemment des comportements étonnants. Néanmoins, l'opérateur
de concaténation de chaîne (||
) accepte toujours des
arguments qui ne sont pas des chaînes de caractères, comme montré dans
Tableau 9.9. Pour les autres cas, insérez une
conversion explicite vers le type text
si vous avez besoin
de dupliquer le comportement précédent.
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.
|
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.
|
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
|
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.
|
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 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.
Tableau 9.10. Autres fonctions pour les chaînes de caractères
Fonction Description Exemple(s) |
---|
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.
|
Supprime la plus longue chaîne contenant seulement les caractères
compris dans
|
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.
|
Étend la chaîne
|
Supprime la chaîne la plus longue contenant seulement les caractères
dans
|
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 42.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 les sous-chaînes capturées résultant de la première
correspondance avec une expression rationnelle POSIX vers
|
Renvoie les sous-chaînes capturées résultant de la première
correspondance d'une expression rationnelle POSIX vers
{bar} {baz}
|
Remplace les sous-chaînes résultant de la première correspondance d'une
expression rationnelle POSIX, ou les correspondances de sous-chaînes
multiples si l'option
|
Divise
|
Divise
hello world
|
Répète
|
Remplace toutes les occurrences dans
|
Inverse l'ordre des caractères dans la chaîne.
|
Renvoie les
|
Étend
|
Supprime la plus longue chaîne contenant seulement les caractères
compris dans
|
Divise
|
Renvoie le premier index de début de la chaîne
|
Extrait la sous-chaîne de
|
Renvoie true si
|
Convertit
|
Convertit le nombre en sa représentation hexadécimale équivalente.
|
Remplace chaque caractère de
|
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 37.5.5). 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 42.1.