Cette section décrit les fonctions et opérateurs d'examen et de mainpulation des valeurs de type chaîne de caractères. Dans ce contexte, les chaînes incluent les valeurs des types character, character varying et text. Sauf lorsque cela est précisé différement, toutes les fonctions listées ci-dessous fonctionnent sur tous ces types, mais une attention particulière doit être portée aux effets potentiels du remplissage automatique lors de l'utilisation du type character. Généralement, les fonctions décrites ici fonctionnent aussi sur les données d'autres types en convertissant au préalable la donnée en une représentation de type chaîne. Quelques fonctions existent aussi nativement pour le type chaîne bit à bit.
SQL définit quelques fonctions de type chaîne avec une syntaxe particulière où des mots clés sont utilisés à la place de virgule pour séparer les arguments. Des détails sont disponibles dans le Tableau 9.5, « Fonctions et opérateurs SQL pour le type chaîne ». Ces fonctions sont aussi implantées en utilisant la syntaxe habituelle d'appel de fonctions (voir le Tableau 9.6, « Autres fonctions de chaîne »).
Tableau 9.5. Fonctions et opérateurs SQL pour le type chaîne
Fonction | Type renvoyé | Description | Exemple | Résultat |
---|---|---|---|---|
chaîne || chaîne | text | Concaténation de chaîne | 'Post' || 'greSQL' | PostgreSQL |
bit_length ( chaîne ) | int | Nombre de bits de la chaîne | bit_length('jose') | 32 |
char_length ( chaîne ) ou character_length ( chaîne ) | int | Nombre de caractères de la chaîne | char_length('jose') | 4 |
convert( chaîne using nom_conversion ) | text | Modifie le codage en focntion du nom de conversion indiqué. Les conversions peuvent être définies par CREATE CONVERSION . De même, il existe quelques noms de conversion pré-définis. Voir le Tableau 9.7, « Conversions intégrées » pour les noms de conversion disponibles. | convert('PostgreSQL' using iso_8859_1_to_utf8) | 'PostgreSQL' dans le codage UTF8 (Unicode, 8 bits) |
lower ( chaîne ) | text | Convertit une chaîne en minuscule | lower('TOM') | tom |
octet_length( chaîne ) | int | Nombre d'octets de la chaîne | octet_length('jose') | 4 |
overlay( chaîne placing chaîne from int [for int ]) | text | Remplace la sous-chaîne | overlay('Txxxxas' placing 'hom' from 2 for 4) | Thomas |
position( substring in chaîne ) | int | Emplacement de la sous-chaîne indiquée | position('om' in 'Thomas') | 3 |
substring( chaîne [from int ] [for int ]) | text | Extrait une sous-chaîne | substring('Thomas' from 2 for 3) | hom |
substring( chaîne from modele ) | text | Extrait la sous-chaîne correspondant à l'expression rationnelle POSIX. Voir Section 9.7, « Correspondance de motif » pour plus d'informations sur la correspondance de modèles. | substring('Thomas' from '...$') | mas |
substring( chaîne from pattern for escape ) | text | Extrait la sous-chaîne correspondant à l'expression rationnelle SQL. Voir Section 9.7, « Correspondance de motif » pour plus d'informations sur la correspondance de modèles. | substring('Thomas' from '%#"o_a#"_' for '#') | oma |
trim([leading | trailing | both] [ caractères ] from chaîne ) | text | Supprime la plus grande chaîne qui ne contient que les caractères (une espace par défaut) à partir du début, de la fin ou des deux extrémités (respectivement leading, trailing, both) de la chaîne . | trim(both 'x' from 'xTomxx') | Tom |
upper ( chaîne ) | text | Convertit une chaîne en majuscule | upper('tom') | TOM |
D'autres fonctions de manipulation de chaînes sont disponibles et listées dans le Tableau 9.6, « Autres fonctions de chaîne ». Certaines d'entre elles sont utilisées en interne pour implanter les fonctions de chaîne répondant au standard SQL listées dans le Tableau 9.5, « Fonctions et opérateurs SQL pour le type chaîne ».
Tableau 9.6. Autres fonctions de chaîne
Fonction | Type renvoyé | Description | Exemple | Résultat |
---|---|---|---|---|
ascii( chaîne ) | int | Code ASCII du premier octet de l'argument | ascii('x') | 120 |
btrim( chaîne text [, caractères text ]) | text | Supprime la chaîne la plus longue constituée uniquement de caractères issus de caractères (une espace par défaut) à partir du début et de la fin de chaîne . | btrim('xyxtrimyyx', 'xy') | trim |
chr(int) | text | Caractère correspondant au code ASCII donné | chr(65) | A |
convert( chaîne text, [ codage_source name,] codage_destination name) | text | Convertit une chaîne dans le codage codage_destination . Le codage initial est indiqué par codage_source . Si codage_source est omis, le codage de la base de données est utilisé. | convert( 'texte_en_utf8', 'UTF8', 'LATIN1') | texte_en_utf8 représenté dans le codage ISO 8859-1 |
decode( chaîne text, type text) | bytea | Décode les données binaires à partir de chaîne , codée préalablement avec encode. Le type de paramètre est le même que encode. | decode('MTIzAAE=', 'base64') | 123\000\001 |
encode( données bytea, type text) | text | Code les données binaires en une représentation différente. Les types supportés sont : base64, hex, escape. escape affiche simplement des octets nuls sous la forme \000 et des antislashs. | encode( E'123\\000\\001', 'base64') | MTIzAAE= |
initcap ( chaîne ) | text | Convertit la première lettre de chaque mot en majuscule et le reste en minuscule. Les mots sont des séquences de caractères alphanumériques séparés par des caractères non alphanumériques. | initcap('bonjour THOMAS') | Bonjour Thomas |
length ( chaîne ) | int | Nombre de caractères de chaîne | length('jose') | 4 |
lpad( chaîne text, longueur int [, remplissage text ]) | text | Remplit chaîne pour avoir une chaîne de longueur longueur en ajoutant les caractères remplissage en début de chaîne (une espace par défaut). Si chaîne a une taille supérieure à longueur , alors elle est tronquée (sur la droite). | lpad('hi', 5, 'xy') | xyxhi |
ltrim( chaîne text [, caractères text ]) | text | Supprime la chaîne la plus longue constituée uniquement de caractères issus de caractères (une espace par défaut) à partir du début de la chaîne. | ltrim('zzzytrim', 'xyz') | trim |
md5( chaîne ) | text | Calcule la clé MD5 de chaîne et retourne le résultat en hexadécimal. | md5('abc') | 900150983cd24fb0 d6963f7d28e17f72 |
pg_client_encoding() | name | Nom de l'encodage client courant. | pg_client_encoding() | SQL_ASCII |
quote_ident( chaîne ) | text | Renvoie la chaîne correctement placée entre guillemets pour utilisation comme identifiant dans une chaîne d'instruction SQL. Les guillemets ne sont ajoutés que s'ils sont nécessaires (c'est-à-dire si la chaîne contient des caractères autres que ceux de l'identifiant ou qu'il peut y avoir un problème de casse). Les guillemets compris dans la chaîne sont correctement doublés. | quote_ident('Foo bar') | "Foo bar" |
quote_literal( chaîne ) | text | Renvoie la chaîne correctement placée entre guillemets pour être utilisée comme libellé dans un chaîne d'instruction SQL. Les guillemets simples compris dans la chaîne et les antislash sont correctement doublés. | quote_literal( 'O\'Reilly') | 'O''Reilly' |
regexp_replace( chaîne text, modèle text, remplacement text [, options text]) | text | Remplace la sous-chaîne correspondant à l'expression rationnelle POSIX. Voir Section 9.7, « Correspondance de motif » pour plus d'informations sur la correspondance de modèle. | regexp_replace('Thomas', '.[mN]a.', 'M') | ThM |
repeat( chaîne text, nombre int) | text | Repète le texte chaîne nombre fois | repeat('Pg', 4) | PgPgPgPg |
replace( chaîne text, àpartirde text, vers text) | text | Remplace dans chaîne toutes les occurrences de la sous-chaîne àpartirde par la sous-chaîne vers . | replace( 'abcdefabcdef', 'cd', 'XX') | abXXefabXXef |
rpad( chaîne text, longueur int [, remplissage text ]) | text | Complète chaîne jusqu'à obtenir une longueur de longueur caractères en ajoutant les caractères remplissage (une espace par défaut). Si la chaîne a une taille supérieure à longueur , elle est tronquée. | rpad('hi', 5, 'xy') | hixyx |
rtrim( chaîne text [, caractères text ]) | text | Supprime la chaîne la plus longue contenant uniquement les caractères provenant de caractères (une espace par défaut) depuis la fin de chaîne . | rtrim('trimxxxx', 'x') | trim |
split_part( chaîne text, délimiteur text, champ int) | text | Divise chaîne par rapport au délimiteur et renvoie le champ donné (en comptant à partir de 1). | split_part( 'abc~@~def~@~ghi', '~@~', 2) | def |
strpos( chaîne , sous-chaîne ) | int | Emplacement de la sous-chaîne indiquée (identique à position( sous-chaîne in sous-chaîne ), mais avec les arguments en ordre inverse). | strpos('high', 'ig') | 2 |
substr( chaîne , from [, nombre ]) | text | Extrait la sous-chaîne (identique à substring( chaîne from àpartirde for nombre )) | substr('alphabet', 3, 2) | ph |
to_ascii( chaîne text [, encodage text ]) | text | Convertit la chaîne en ASCII à partir de n'importe quelle autre encodage (ne supporte que les conversions à partir de LATIN1, LATIN2, LATIN9 et WIN1250). | to_ascii('Karel') | Karel |
to_hex( nombre int ou bigint) | text | Convertit nombre dans sa représentation hexadécimale équivalente. | to_hex(2147483647) | 7fffffff |
translate( chaîne text, àpartirde text, vers text) | text | Tout caractère de chaîne qui correspond à un caractère de l'ensemble àpartirde est remplacé par le caractère correspondant de l'ensemble vers . | translate('12345', '14', 'ax') | a23x5 |
Tableau 9.7. Conversions intégrées
Nom de la conversion [a] | Codage source | Codage destination |
---|---|---|
ascii_to_mic | SQL_ASCII | MULE_INTERNAL |
ascii_to_utf8 | SQL_ASCII | UTF8 |
big5_to_euc_tw | BIG5 | EUC_TW |
big5_to_mic | BIG5 | MULE_INTERNAL |
big5_to_utf8 | BIG5 | UTF8 |
euc_cn_to_mic | EUC_CN | MULE_INTERNAL |
euc_cn_to_utf8 | EUC_CN | UTF8 |
euc_jp_to_mic | EUC_JP | MULE_INTERNAL |
euc_jp_to_sjis | EUC_JP | SJIS |
euc_jp_to_utf8 | EUC_JP | UTF8 |
euc_kr_to_mic | EUC_KR | MULE_INTERNAL |
euc_kr_to_utf8 | EUC_KR | UTF8 |
euc_tw_to_big5 | EUC_TW | BIG5 |
euc_tw_to_mic | EUC_TW | MULE_INTERNAL |
euc_tw_to_utf8 | EUC_TW | UTF8 |
gb18030_to_utf8 | GB18030 | UTF8 |
gbk_to_utf8 | GBK | UTF8 |
iso_8859_10_to_utf8 | LATIN6 | UTF8 |
iso_8859_13_to_utf8 | LATIN7 | UTF8 |
iso_8859_14_to_utf8 | LATIN8 | UTF8 |
iso_8859_15_to_utf8 | LATIN9 | UTF8 |
iso_8859_16_to_utf8 | LATIN10 | UTF8 |
iso_8859_1_to_mic | LATIN1 | MULE_INTERNAL |
iso_8859_1_to_utf8 | LATIN1 | UTF8 |
iso_8859_2_to_mic | LATIN2 | MULE_INTERNAL |
iso_8859_2_to_utf8 | LATIN2 | UTF8 |
iso_8859_2_to_windows_1250 | LATIN2 | WIN1250 |
iso_8859_3_to_mic | LATIN3 | MULE_INTERNAL |
iso_8859_3_to_utf8 | LATIN3 | UTF8 |
iso_8859_4_to_mic | LATIN4 | MULE_INTERNAL |
iso_8859_4_to_utf8 | LATIN4 | UTF8 |
iso_8859_5_to_koi8_r | ISO_8859_5 | KOI8 |
iso_8859_5_to_mic | ISO_8859_5 | MULE_INTERNAL |
iso_8859_5_to_utf8 | ISO_8859_5 | UTF8 |
iso_8859_5_to_windows_1251 | ISO_8859_5 | WIN1251 |
iso_8859_5_to_windows_866 | ISO_8859_5 | WIN866 |
iso_8859_6_to_utf8 | ISO_8859_6 | UTF8 |
iso_8859_7_to_utf8 | ISO_8859_7 | UTF8 |
iso_8859_8_to_utf8 | ISO_8859_8 | UTF8 |
iso_8859_9_to_utf8 | LATIN5 | UTF8 |
johab_to_utf8 | JOHAB | UTF8 |
koi8_r_to_iso_8859_5 | KOI8 | ISO_8859_5 |
koi8_r_to_mic | KOI8 | MULE_INTERNAL |
koi8_r_to_utf8 | KOI8 | UTF8 |
koi8_r_to_windows_1251 | KOI8 | WIN1251 |
koi8_r_to_windows_866 | KOI8 | WIN866 |
mic_to_ascii | MULE_INTERNAL | SQL_ASCII |
mic_to_big5 | MULE_INTERNAL | BIG5 |
mic_to_euc_cn | MULE_INTERNAL | EUC_CN |
mic_to_euc_jp | MULE_INTERNAL | EUC_JP |
mic_to_euc_kr | MULE_INTERNAL | EUC_KR |
mic_to_euc_tw | MULE_INTERNAL | EUC_TW |
mic_to_iso_8859_1 | MULE_INTERNAL | LATIN1 |
mic_to_iso_8859_2 | MULE_INTERNAL | LATIN2 |
mic_to_iso_8859_3 | MULE_INTERNAL | LATIN3 |
mic_to_iso_8859_4 | MULE_INTERNAL | LATIN4 |
mic_to_iso_8859_5 | MULE_INTERNAL | ISO_8859_5 |
mic_to_koi8_r | MULE_INTERNAL | KOI8 |
mic_to_sjis | MULE_INTERNAL | SJIS |
mic_to_windows_1250 | MULE_INTERNAL | WIN1250 |
mic_to_windows_1251 | MULE_INTERNAL | WIN1251 |
mic_to_windows_866 | MULE_INTERNAL | WIN866 |
sjis_to_euc_jp | SJIS | EUC_JP |
sjis_to_mic | SJIS | MULE_INTERNAL |
sjis_to_utf8 | SJIS | UTF8 |
tcvn_to_utf8 | WIN1258 | UTF8 |
uhc_to_utf8 | UHC | UTF8 |
utf8_to_ascii | UTF8 | SQL_ASCII |
utf8_to_big5 | UTF8 | BIG5 |
utf8_to_euc_cn | UTF8 | EUC_CN |
utf8_to_euc_jp | UTF8 | EUC_JP |
utf8_to_euc_kr | UTF8 | EUC_KR |
utf8_to_euc_tw | UTF8 | EUC_TW |
utf8_to_gb18030 | UTF8 | GB18030 |
utf8_to_gbk | UTF8 | GBK |
utf8_to_iso_8859_1 | UTF8 | LATIN1 |
utf8_to_iso_8859_10 | UTF8 | LATIN6 |
utf8_to_iso_8859_13 | UTF8 | LATIN7 |
utf8_to_iso_8859_14 | UTF8 | LATIN8 |
utf8_to_iso_8859_15 | UTF8 | LATIN9 |
utf8_to_iso_8859_16 | UTF8 | LATIN10 |
utf8_to_iso_8859_2 | UTF8 | LATIN2 |
utf8_to_iso_8859_3 | UTF8 | LATIN3 |
utf8_to_iso_8859_4 | UTF8 | LATIN4 |
utf8_to_iso_8859_5 | UTF8 | ISO_8859_5 |
utf8_to_iso_8859_6 | UTF8 | ISO_8859_6 |
utf8_to_iso_8859_7 | UTF8 | ISO_8859_7 |
utf8_to_iso_8859_8 | UTF8 | ISO_8859_8 |
utf8_to_iso_8859_9 | UTF8 | LATIN5 |
utf8_to_johab | UTF8 | JOHAB |
utf8_to_koi8_r | UTF8 | KOI8 |
utf8_to_sjis | UTF8 | SJIS |
utf8_to_tcvn | UTF8 | WIN1258 |
utf8_to_uhc | UTF8 | UHC |
utf8_to_windows_1250 | UTF8 | WIN1250 |
utf8_to_windows_1251 | UTF8 | WIN1251 |
utf8_to_windows_1252 | UTF8 | WIN1252 |
utf8_to_windows_1253 | UTF8 | WIN1253 |
utf8_to_windows_1254 | UTF8 | WIN1254 |
utf8_to_windows_1255 | UTF8 | WIN1255 |
utf8_to_windows_1256 | UTF8 | WIN1256 |
utf8_to_windows_1257 | UTF8 | WIN1257 |
utf8_to_windows_866 | UTF8 | WIN866 |
utf8_to_windows_874 | UTF8 | WIN874 |
windows_1250_to_iso_8859_2 | WIN1250 | LATIN2 |
windows_1250_to_mic | WIN1250 | MULE_INTERNAL |
windows_1250_to_utf8 | WIN1250 | UTF8 |
windows_1251_to_iso_8859_5 | WIN1251 | ISO_8859_5 |
windows_1251_to_koi8_r | WIN1251 | KOI8 |
windows_1251_to_mic | WIN1251 | MULE_INTERNAL |
windows_1251_to_utf8 | WIN1251 | UTF8 |
windows_1251_to_windows_866 | WIN1251 | WIN866 |
windows_1252_to_utf8 | WIN1252 | UTF8 |
windows_1256_to_utf8 | WIN1256 | UTF8 |
windows_866_to_iso_8859_5 | WIN866 | ISO_8859_5 |
windows_866_to_koi8_r | WIN866 | KOI8 |
windows_866_to_mic | WIN866 | MULE_INTERNAL |
windows_866_to_utf8 | WIN866 | UTF8 |
windows_866_to_windows_1251 | WIN866 | WIN |
windows_874_to_utf8 | WIN874 | UTF8 |
[a] Les noms des conversions suivent un schéma de nommage standard : le nom officiel de l'encodage source avec tous les caractères non alpha-numériques remplacés par des tirets bas suivi de _to_ suivi par le nom de l'encodage cible ayant subit le même traitement que le nom de l'encodage source. Il est donc possible que les noms varient par rapport aux noms d'encodage personnalisés.. |