Documentation PostgreSQL 8.1.23 > Langage SQL > Fonctions et opérateurs > Fonctions et opérateurs de chaînes | |
Fonctions et opérateurs mathématiques | Fonctions et opérateurs de chaînes binaires |
Cette section décrit les fonctions et opérateurs pour examiner et manipuler 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 cas contraire précisé, toutes les fonctions listées ci-dessous fonctionnent sur tous ces types mais il faut faire attention 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ù certains 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 définies en utilisant la syntaxe rationnelle pour l'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 |
---|---|---|---|---|
string || string | text | Concaténation de chaîne | 'Post' || 'greSQL' | PostgreSQL |
bit_length (string) | int | Nombre de bits dans une chaîne | bit_length('jose') | 32 |
char_length (string) ou character_length (string) | int | Nombre de caractères dans une chaîne | char_length('jose') | 4 |
convert(string using nom_conversion) | text | Modifie le codage en utilisant le nom de conversion cité. 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 (string) | text | Convertit une chaîne en minuscule | lower('TOM') | tom |
octet_length(string) | int | Nombre d'octets dans une chaîne | octet_length('jose') | 4 |
overlay(string placing string from int [for int]) | text | Remplace la sous-chaîne | overlay('Txxxxas' placing 'hom' from 2 for 4) | Thomas |
position(substring in string) | int | Emplacement des sous-chaînes spécifiées | position('om' in 'Thomas') | 3 |
substring(string [from int] [for int]) | text | Extrait une sous-chaîne | substring('Thomas' from 2 for 3) | hom |
substring(string from modele) | text | Extrait une sous-chaîne correspondant à l'expression rationnelle POSIX. Voir Section 9.7, « Correspondance de modèles » pour plus d'informations sur la reconnaissance de modèles. | substring('Thomas' from '...$') | mas |
substring(string from pattern for escape) | text | Extrait une sous-chaîne correspondant à l'expression rationnelle SQL. Voir Section 9.7, « Correspondance de modèles » pour plus d'informations sur la reconnaissance 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 contenant seulement les caractères (un 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 (string) | 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 coder 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(text) | int | Code ASCII du premier caractère de l'argument | ascii('x') | 120 |
btrim(chaîne text [, caractères text]) | text | Supprime la chaîne la plus longue consistant seulement de caractères compris dans caractères (un espace par défaut) entre le début et 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 spécifié par codage_source. Si codage_source est omis, le codage de la base de données est pris en compte. | 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 auparavant 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 en ASCII uniquement. Les types supportés sont : base64, hex, escape. | encode( '123\\000\\001', 'base64') | MTIzAAE= |
initcap (text) | 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 text) | int | Nombre de caractères dans 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 (un 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(string chaîne [, caractères text]) | text | Supprime la chaîne la plus longue contenant seulement les caractères de chaîne (un espace par défaut) à partir du début de la chaîne. | ltrim('zzzytrim', 'xyz') | trim |
md5(chaîne text) | text | Calcule la clé MD5 de chaîne, renvoyant le résultat en hexadécimal. | md5('abc') | 900150983cd24fb0 d6963f7d28e17f72 |
pg_client_encoding() | name | Nom du codage client actuel | pg_client_encoding() | SQL_ASCII |
quote_ident(chaîne text) | text | Renvoie la chaîne entre guillemets à utiliser comme identifiant dans une chaîne d'instructions SQL. Les guillemets sont seulement ajoutés si nécessaire (c'est-à-dire si la chaîne contient des caractères non identifieurs). Les guillemets faisant partie de la chaîne sont doublés. | quote_ident('Foo bar') | "Foo bar" |
quote_literal(chaîne text) | text | Renvoie la chaîne correctement entre guillemets pour être utilisée comme une chaîne littérale dans une chaîne d'instructions SQL. Les guillemets 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 une sous-chaîne correspondant à l'expression rationnelle POSIX. Voir Section 9.7, « Correspondance de modèles » pour plus d'informations sur la reconnaissance de modèles. | 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 avec la sous-chaîne vers. | replace( 'abcdefabcdef', 'cd', 'XX') | abXXefabXXef |
rpad(chaîne text, longueur int [, remplissage text]) | text | Remplit chaîne sur une longueur de longueur caractères en ajoutant les caractères remplissage (un 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 (un 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 spécifiée (identique à position(sous-chaîne in sous-chaîne), mais notez l'ordre inverse des arguments) | 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(text [, codage]) | text | Convertit le texte en ASCII à partir de n'importe quelle autre forme de codage [a] | 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 dans chaîne qui correspond à un caractère dans l'ensemble àpartirde est remplacé par le caractère correspondant dans l'ensemble vers. | translate('12345', '14', 'ax') | a23x5 |
[a] La fonction to_ascii supporte la conversion de LATIN1, LATIN2, LATIN9 et WIN1250 uniquement. |
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_1256 | UTF8 | WIN1256 |
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 la source de codage avec tous les caractères non alpha-numériques remplacés par des tirets bas suivis d'un _to_ suivi par le nom de destination du codage après avoir suivi le même traitement que le nom de la source. Du coup, les noms pourraient dévier de noms de codage personnalisés. |