Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni e operatori sulle stringhe
PrecedenteFunzioni e operatori matematiciFunzioni e operatori per stringhe binarieSuccessivo

9.4. Funzioni e operatori sulle stringhe

Questa sezione descrive le funzioni e gli operatori atti a esaminare e manipolare stringhe. In questo contesto le stringhe includono valori dei tipi character, character varying, e text. Se non diversamente indicato, tutte le funzioni elencate sotto lavorano con tutti questi tipi, ma è bene considerare gli effetti potenziali del riempimento automatico con spazi quando si utilizza il tipo character. Esistono anche alcune funzioni native per i tipi stringa di bit.

SQL definisce alcune funzioni sulle stringhe che usano parole chiave, invece di virgole, per separare gli argomenti. Dettagli sono in Tabella 9.5, «Funzioni e operatori stringa SQL». PostgreSQL™ prevede anche versioni di queste funzioni che usano la sintassi di invocazione normale per le funzioni (see Tabella 9.6, «Altre funzioni stringa»).

[Nota]

Nota

[Nota]

Nota

Nota per il revisore: coercizioni*

Prima di PostgreSQL™ 8.3, queste funzioni accettavano tacitamente anche valori di molti tipi di dato non-stringa, a causa della presenza di implicite coercizioni da quei tipi di dato a text. Quelle coercizioni sono state rimosse perchè hanno causato frequentemente comportamenti inaspettati. Tuttavia, l'operatore di concatenamento della stringa (||) accetta ancora input non-stringa, a condizione che almeno un input sia di tipo stringa, come mostrato nella tabella Tabella 9.5, «Funzioni e operatori stringa SQL». Per altri casi, inserire una esplicita coercizione a testo se si necessita duplicare il comportamento precedente.

Tabella 9.5. Funzioni e operatori stringa SQL

FunzioneTipo restituitoDescrizioneEsempioRisultato
string || string text Concatenamento di stringhe 'Post' || 'greSQL'PostgreSQL
string || non-stringa oppure non-stringa || string text Concatenamento di stringhe con un input non-stringa 'Valore: ' || 42Valore: 42
bit_length(string)intNumero di bit nella stringabit_length('jose')32
char_length(string) oppure character_length(string)int Numero di caratteri nella stringa char_length('jose')4
lower(string)textConverte stringa in caratteri minuscolilower('TOM')tom
octet_length(string)intNumero di byte nella stringaoctet_length('jose')4
overlay(string placing substring from int1 [for int2])text Rimpiazza gli int2 caratteri di stringa con i caratteri di substring partendo dalla posizione int1 overlay('Txxxxas' placing 'hom' from 2 for 4)Thomas
position(substring in string)intPosizione della sottostringa specificataposition('om' in 'Thomas')3
substring(string [from int] [for int])text Estrae sottostringa substring('Thomas' from 2 for 3)hom
substring(string from modello)text Estrae la sottostringa che corrisponde all'espressione regolare POSIX. Consultare Sezione 9.7, «Confronto con modelli» per ulteriori informazioni sui confronti con modelli. substring('Thomas' from '...$')mas
substring(string from modello for escape)text Estrae la sottostringa che corrisponde all'espressione regolare SQL. Consultare Sezione 9.7, «Confronto con modelli» per ulteriori informazioni sui confronti con modelli. substring('Thomas' from '%#"m_s#"_' for '#')oma
trim([leading | trailing | both] [carattere] from string) text Rimuove la più lunga stringa contenente solo il carattere (uno spazio come impostazione predefinita) da inizio/fine/ambedue i lati di string trim(both 'x' from 'xTomxx')Tom
upper(string)textConverte stringa in caratteri maiuscoliupper('tom')TOM

Ulteriori funzioni di manipolazione stringhe sono disponibili ed elencate nella tabella Tabella 9.6, «Altre funzioni stringa». Alcune di esse sono usate internamente per implementare le funzioni stringa standard-SQL elencate nella tabella Tabella 9.5, «Funzioni e operatori stringa SQL».

Tabella 9.6. Altre funzioni stringa

FunzioneTipo restituitoDescrizioneEsempioRisultato
ascii(string)int codice ASCII del primo carattere dell'argomento. Per UTF8 restituisce il codice Unicode del carattere puntato. Per le altre codificazioni multibyte l'argomento deve necessariamente essere un carattere ASCII. ascii('x')120
btrim(string text [, caratteri text])text Rimuove la stringa più lunga composta solo di caratteri contenuti in caratteri (uno spazio per impostazione predefinita) dall'inizio alla fine di string btrim('xyxtrimyyx', 'xy')trim
chr(int)text Carattere del codice fornito. Per UTF8 l'argomento è trattato come un codice Unicode puntato. Per altre codificazioni multibyte l'argomento deve necessariamente designare un carattere ASCII. chr(65)A
convert(string bytea, codifica_src name, codifica_dest name) bytea Converte la stringa alla codifica_dest. La codifica originale è specificata da codifica_src. La string deve essere valida in questa codifica. La conversione può essere definita da CREATE CONVERSION. Ci sono anche alcune conversioni predefinite. consultare la Tabella 9.7, «Conversioni incorporate» per le conversioni disponibili. convert('testo_in_utf8', 'UTF8', 'LATIN1')testo_in_utf8 rappresentato in codifica ISO 8859-1
convert_from(string bytea, codifica_src name) text Converte la stringa alla codifica del database. La codifica originale è specificata in codifica_src. La string deve essere valida in questa codifica. convert_from('testo_in_utf8', 'UTF8')testo_in_utf8 rappresentato nella corrente codifica del database
convert_to(string text, codifica_dest name) bytea Converte stringa nella codifica_dest. convert_to('un certo testo', 'UTF8')un certo testo rappresentato nella codifica UTF8
decode(string text, tipo text) bytea Decodifica il dato binario di string codificato in precedenza con encode. Il tipo di parametro è lo stesso come in encode. decode('MTIzAAE=', 'base64')123\000\001
encode(fromto bytea, tipo text) text Codifica un dato binario in una differente rappresentazione. I tipi supportati sono: base64, hex, escape. Escape fornisce in uscita solamente byte nulli come \000 e doppie barre inverse. encode(E'123\\000\\001', 'base64')MTIzAAE=
initcap(string)text Converte la prima lettera di ogni parola in maiuscolo e il resto in minuscolo. Le parole sono sequenze di caratteri alfanumerici separate da un carattere non-alfabetico. initcap('hi THOMAS')Hi Thomas
length(string)int Numero di caratteri in string length('jose')4
length(stringbytea, codifica nome )int Numero di caratteri in string nella codifica fornita. La string deve essere valida in questa codifica. length('jose', 'UTF8')4
lpad(string text, lunga int [, riempimento text]) text Estende la string alla lunghezza di lunga anteponendo i caratteri di riempimento (uno spazio per impostazione predefinita). Se la string è già più lunga di lunga allora essa viene troncata (sulla destra). lpad('hi', 5, 'xy')xyxhi
ltrim(string text [, caratteri text]) text Rimuove la stringa più lunga contenente solo caratteri da caratteri (uno spazio per impostazione predefinita) dall'inizio di string ltrim('zzzytrim', 'xyz')trim
md5(string)text Calcola l'hash MD5 di string, restituendo il risultato in esadecimale md5('abc')900150983cd24fb0 d6963f7d28e17f72
pg_client_encoding()name Il nome corrente di codifica del client pg_client_encoding()SQL_ASCII
quote_ident(string text)text Restituisce la stringa fornita adeguatamente quotata per essere usata come un identificatore in una istruzione stringa SQL. Gli apici sono aggiunti solo se necessario (cioè, se la stringa contiene caratteri non-identificatori o parole con caratteri minuscoli da trasformare in maiuscolo). Apici incorporati vengono adeguatamente raddoppiati. quote_ident('Foo bar')"Foo bar"
quote_literal(string text)text Restituisce la stringa fornita adeguatamente quotata per essere usata come un letterale stringa in una istruzione stringa SQL. Apici singoli e barre inverse incorporate vengono adeguatamente raddoppiati. quote_literal('O\'Reilly')'O''Reilly'
quote_literal(value anyelement)text Forza il valore fornito a testo e quindi lo racchiude tra apici come un letterale. Apici singoli e barre inverse incorporate vengono adeguatamente raddoppiati. quote_literal('O\'Reilly')'O''Reilly'
quote_literal(value anyelement)text Forza il valore fornito a testo e quindi lo racchiude tra apici come un letterale. Apici singoli e barre inverse incorporate vengono adeguatamente raddoppiate. quote_literal(42.5)'42.5'
regexp_matches(string text, modello text [, flag text])setof text[] Restituisce tutte le sottotringhe catturate risultanti dal confronto di una espressione regolare POSIX con la string. Consultare Sezione 9.7.3, «Espressioni regolari POSIX» per ulteriori informazioni. regexp_matches('foobarbequebaz', '(bar)(beque)'){bar,beque}
regexp_replace(string text, modello text, sostituzione text [, flag text])text Rimpiazza sottostringa/e che corrispondono ad una espressione regolare POSIX. Consultare Sezione 9.7.3, «Espressioni regolari POSIX» per ulteriori informazioni. regexp_replace('Thomas', '.[mN]a.', 'M')ThM
regexp_split_to_array(string text, modello text [, flag text ])text[] Scinde string usando una espressione regolare POSIX come delimitatore. Consultare Sezione 9.7.3, «Espressioni regolari POSIX» per ulteriori informazioni. regexp_split_to_array('hello world', E'\\s+'){hello,world}
regexp_split_to_table(string text, modello text [, flag text])setof text Scinde string usando una espressione regolare POSIX come delimitatore. Consultare Sezione 9.7.3, «Espressioni regolari POSIX» per ulteriori informazioni. regexp_split_to_table('hello world', E'\\s+')hello

world

(2 rows)
repeat(string text, numero int)textRipete string lo specificato numero di volterepeat('Pg', 4)PgPgPgPg
replace(string text, from text, to text)textSostituisce tutte le occorrenze in string della sottostringa from con la sottostringa to replace('abcdefabcdef', 'cd', 'XX')abXXefabXXef
rpad(string text, lunga int [, iempimento text]) text Estende la string alla lunghezza di lunga anteponendo i caratteri di riempimento (uno spazio per impostazione predefinita). Se la string è già più lunga di lunga allora essa viene troncata. rpad('hi', 5, 'xy')hixyx
rtrim(string text [, caratteri text]) text Rimuove la stringa più lunga contenente solo caratteri da caratteri (uno spazio per impostazione predefinita) dalla fine di string rtrim('trimxxxx', 'x')trim
split_part(string text, delimitatore text, campo int)textScinde string tramite delimitatore e restituisce il campo richiesto(partendo da 1) split_part('abc~@~def~@~ghi', '~@~', 2)def
strpos(string, substring)int Posizione della sottostringa specificata(come position(substring in string),ma, notare l'inversione nell'ordine degli argomenti) strpos('high', 'ig')2
substr(string, posiz [, numcarat])text Estrae una sottostringa (come substring(string from posiz for numcarat)) substr('alfabeto', 3, 2)fa
to_ascii(string text [, codifica text])text Converte string ad ASCII da un altra codifica (supporta solo conversione da codifiche LATIN1, LATIN2, LATIN9 e WIN1250) to_ascii('Karel')Karel
to_hex(numero int o bigint)textConverte numero nella sua equivalente rappresentazione esadecimale to_hex(2147483647)7fffffff
translate(string text, from text, to text) text Ogni carattere di string che eguaglia un carattere dell'insieme from viene sostituito dal corrispondente carattere dell'insieme to translate('12345', '14', 'ax')a23x5

Vedere anche la funzione aggregata string_agg in Sezione 9.18, «Funzioni aggregate».

Tabella 9.7. Conversioni incorporate

Nome conversione [a] Codifica sorgenteCodifica destinazione
ascii_to_micSQL_ASCIIMULE_INTERNAL
ascii_to_utf8SQL_ASCIIUTF8
big5_to_euc_twBIG5EUC_TW
big5_to_micBIG5MULE_INTERNAL
big5_to_utf8BIG5UTF8
euc_cn_to_micEUC_CNMULE_INTERNAL
euc_cn_to_utf8EUC_CNUTF8
euc_jp_to_micEUC_JPMULE_INTERNAL
euc_jp_to_sjisEUC_JPSJIS
euc_jp_to_utf8EUC_JPUTF8
euc_kr_to_micEUC_KRMULE_INTERNAL
euc_kr_to_utf8EUC_KRUTF8
euc_tw_to_big5EUC_TWBIG5
euc_tw_to_micEUC_TWMULE_INTERNAL
euc_tw_to_utf8EUC_TWUTF8
gb18030_to_utf8GB18030UTF8
gbk_to_utf8GBKUTF8
iso_8859_10_to_utf8LATIN6UTF8
iso_8859_13_to_utf8LATIN7UTF8
iso_8859_14_to_utf8LATIN8UTF8
iso_8859_15_to_utf8LATIN9UTF8
iso_8859_16_to_utf8LATIN10UTF8
iso_8859_1_to_micLATIN1MULE_INTERNAL
iso_8859_1_to_utf8LATIN1UTF8
iso_8859_2_to_micLATIN2MULE_INTERNAL
iso_8859_2_to_utf8LATIN2UTF8
iso_8859_2_to_windows_1250LATIN2WIN1250
iso_8859_3_to_micLATIN3MULE_INTERNAL
iso_8859_3_to_utf8LATIN3UTF8
iso_8859_4_to_micLATIN4MULE_INTERNAL
iso_8859_4_to_utf8LATIN4UTF8
iso_8859_5_to_koi8_rISO_8859_5KOI8
iso_8859_5_to_micISO_8859_5MULE_INTERNAL
iso_8859_5_to_utf8ISO_8859_5UTF8
iso_8859_5_to_windows_1251ISO_8859_5WIN1251
iso_8859_5_to_windows_866ISO_8859_5WIN866
iso_8859_6_to_utf8ISO_8859_6UTF8
iso_8859_7_to_utf8ISO_8859_7UTF8
iso_8859_8_to_utf8ISO_8859_8UTF8
iso_8859_9_to_utf8LATIN5UTF8
johab_to_utf8JOHABUTF8
koi8_r_to_iso_8859_5KOI8ISO_8859_5
koi8_r_to_micKOI8MULE_INTERNAL
koi8_r_to_utf8KOI8UTF8
koi8_r_to_windows_1251KOI8WIN1251
koi8_r_to_windows_866KOI8WIN866
mic_to_asciiMULE_INTERNALSQL_ASCII
mic_to_big5MULE_INTERNALBIG5
mic_to_euc_cnMULE_INTERNALEUC_CN
mic_to_euc_jpMULE_INTERNALEUC_JP
mic_to_euc_krMULE_INTERNALEUC_KR
mic_to_euc_twMULE_INTERNALEUC_TW
mic_to_iso_8859_1MULE_INTERNALLATIN1
mic_to_iso_8859_2MULE_INTERNALLATIN2
mic_to_iso_8859_3MULE_INTERNALLATIN3
mic_to_iso_8859_4MULE_INTERNALLATIN4
mic_to_iso_8859_5MULE_INTERNALISO_8859_5
mic_to_koi8_rMULE_INTERNALKOI8
mic_to_sjisMULE_INTERNALSJIS
mic_to_windows_1250MULE_INTERNALWIN1250
mic_to_windows_1251MULE_INTERNALWIN1251
mic_to_windows_866MULE_INTERNALWIN866
sjis_to_euc_jpSJISEUC_JP
sjis_to_micSJISMULE_INTERNAL
sjis_to_utf8SJISUTF8
tcvn_to_utf8WIN1258UTF8
uhc_to_utf8UHCUTF8
utf8_to_asciiUTF8SQL_ASCII
utf8_to_big5UTF8BIG5
utf8_to_euc_cnUTF8EUC_CN
utf8_to_euc_jpUTF8EUC_JP
utf8_to_euc_krUTF8EUC_KR
utf8_to_euc_twUTF8EUC_TW
utf8_to_gb18030UTF8GB18030
utf8_to_gbkUTF8GBK
utf8_to_iso_8859_1UTF8LATIN1
utf8_to_iso_8859_10UTF8LATIN6
utf8_to_iso_8859_13UTF8LATIN7
utf8_to_iso_8859_14UTF8LATIN8
utf8_to_iso_8859_15UTF8LATIN9
utf8_to_iso_8859_16UTF8LATIN10
utf8_to_iso_8859_2UTF8LATIN2
utf8_to_iso_8859_3UTF8LATIN3
utf8_to_iso_8859_4UTF8LATIN4
utf8_to_iso_8859_5UTF8ISO_8859_5
utf8_to_iso_8859_6UTF8ISO_8859_6
utf8_to_iso_8859_7UTF8ISO_8859_7
utf8_to_iso_8859_8UTF8ISO_8859_8
utf8_to_iso_8859_9UTF8LATIN5
utf8_to_johabUTF8JOHAB
utf8_to_koi8_rUTF8KOI8
utf8_to_sjisUTF8SJIS
utf8_to_tcvnUTF8WIN1258
utf8_to_uhcUTF8UHC
utf8_to_windows_1250UTF8WIN1250
utf8_to_windows_1251UTF8WIN1251
utf8_to_windows_1252UTF8WIN1252
utf8_to_windows_1253UTF8WIN1253
utf8_to_windows_1254UTF8WIN1254
utf8_to_windows_1255UTF8WIN1255
utf8_to_windows_1256UTF8WIN1256
utf8_to_windows_1257UTF8WIN1257
utf8_to_windows_866UTF8WIN866
utf8_to_windows_874UTF8WIN874
windows_1250_to_iso_8859_2WIN1250LATIN2
windows_1250_to_micWIN1250MULE_INTERNAL
windows_1250_to_utf8WIN1250UTF8
windows_1251_to_iso_8859_5WIN1251ISO_8859_5
windows_1251_to_koi8_rWIN1251KOI8
windows_1251_to_micWIN1251MULE_INTERNAL
windows_1251_to_utf8WIN1251UTF8
windows_1251_to_windows_866WIN1251WIN866
windows_1252_to_utf8WIN1252UTF8
windows_1256_to_utf8WIN1256UTF8
windows_866_to_iso_8859_5WIN866ISO_8859_5
windows_866_to_koi8_rWIN866KOI8
windows_866_to_micWIN866MULE_INTERNAL
windows_866_to_utf8WIN866UTF8
windows_866_to_windows_1251WIN866WIN
windows_874_to_utf8WIN874UTF8
euc_jis_2004_to_utf8EUC_JIS_2004UTF8
ut8_to_euc_jis_2004UTF8EUC_JIS_2004
shift_jis_2004_to_utf8SHIFT_JIS_2004UTF8
ut8_to_shift_jis_2004UTF8SHIFT_JIS_2004
euc_jis_2004_to_shift_jis_2004EUC_JIS_2004SHIFT_JIS_2004
shift_jis_2004_to_euc_jis_2004SHIFT_JIS_2004EUC_JIS_2004

[a] I nomi delle conversioni seguono uno schema standard di costruzione del nome: Il nome ufficiale della codifica sorgente con tutti i caratteri non-alfanumerici sostituiti da caratteri underscore, seguito da _to_, seguito dal nome della codifica di destinazione elaborato nella medesima maniera. Perciò, questi nomi potrebbero deviare dai nomi abituali di codifiche.


Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni e operatori sulle stringhe
PrecedenteFunzioni e operatori matematiciFunzioni e operatori per stringhe binarieSuccessivo