6.4. Funções e operadores para cadeias de caracteres

Esta seção descreve as funções e operadores disponíveis para examinar e manipular cadeias de caracteres. Neste contexto as cadeias de caracteres incluem valores dos tipos CHARACTER, CHARACTER VARYING e TEXT. A menos que seja dito o contrário, todas as funções listadas abaixo trabalham com todos estes tipos, mas deve ser tomado cuidado quando for utilizado o tipo CHARACTER com os efeitos em potencial do preenchimento automático. De modo geral, as funções descritas nesta seção também trabalham com dados que não são cadeias de caracteres, convertendo estes dados primeiro na representação de cadeia de caracteres. Algumas funções também existem em forma nativa para os tipos cadeia de bits.

O SQL define algumas funções para cadeias de caracteres com uma sintaxe especial onde certas palavras chave, em vez de vírgulas, são utilizadas para separar os argumentos. Os detalhes estão na Tabela 6-6. Estas funções também são implementadas utilizando a sintaxe regular de chamada de funções (Veja a Tabela 6-7).

Tabela 6-6. Funções e operadores SQL para cadeias de caracteres

FunçãoTipo retornadoDescriçãoExemploResultado
cadeia_de_caracteres || cadeia_de_caracteres text Concatenação de cadeias de caracteres 'Post' || 'greSQL'PostgreSQL
bit_length(cadeia_de_caracteres)integerNúmero de bits na cadeia de caracteresbit_length('jose')32
char_length(cadeia_de_caracteres) ou character_length(cadeia_de_caracteres)integer Número de caracteres na cadeia de caracteres char_length('jose')4
convert(cadeia_de_caracteres using nome_da_conversão)text Muda a codificação utilizando o nome de conversão especificado. As conversões podem ser definidas pelo comando CREATE CONVERSION. Além disso, existem alguns nomes de conversão pré-definidos. Consulte a Tabela 6-8 para ver os nomes de conversão disponíveis. convert('PostgreSQL' using iso_8859_1_to_utf_8)'PostgreSQL' na codificação Unicode (UTF-8)
lower(cadeia_de_caracteres)textConverte a cadeia de caracteres em letras minúsculaslower('TOM')tom
octet_length(cadeia_de_caracteres)integerNúmero de bytes na cadeia de caracteresoctet_length('jose')4
overlay(cadeia_de_caracteres placing cadeia_de_caracteres from integer [for integer])text Inserir substring overlay('Txxxxas' placing 'hom' from 2 for 4)Thomas
position(caracteres in cadeia_de_caracteres)integerLocalização dos caracteres especificadosposition('om' in 'Thomas')3
substring(cadeia_de_caracteres [from integer] [for integer])text Extrai parte da cadeia de caracteres substring('Thomas' from 2 for 3)hom
substring(cadeia_de_caracteres from expressão)text Extrai a parte da cadeia de caracteres correspondente à expressão regular POSIX substring('Thomas' from '...$')mas
substring(cadeia_de_caracteres from expressão for escape)text Extrai a parte da cadeia de caracteres correspondente à expressão regular SQL substring('Thomas' from '%#"o_a#"_' for '#')oma
trim([leading | trailing | both] [caracteres] from cadeia_de_caracteres) text Remove da extremidade inicial/final/ambas da cadeia_de_caracteres, a cadeia de caracteres mais longa contendo apenas os caracteres (espaço por padrão) trim(both 'x' from 'xTomxx')Tom
upper(cadeia_de_caracteres)textConverte a cadeia de caracteres em letras maiúsculasupper('tom')TOM

Estão disponíveis funções adicionais para manipulação de cadeias de caracteres conforme listado na Tabela 6-7. Algumas delas são utilizadas internamente para implementar funções de cadeia de caracteres padrão do SQL listadas na Tabela 6-6.

Tabela 6-7. Outras funções para cadeia de caracteres

FunçãoTipo retornadoDescriçãoExemploResultado
ascii(text)integercódigo ASCII do primeiro caractere do argumentoascii('x')120
btrim(cadeia_de_caracteres text, trim text)text Remove (trim) a maior cadeia de caracteres composta apenas pelos caracteres contidos em trim, do início e do fim da cadeia_de_caracteres btrim('xyxtrimyyx','xy')trim
chr(integer)textCaractere com o código ASCII fornecidochr(65)A
convert(cadeia_de_caracteres text, [codificação_origem name,] codificação_destino name) text Converte a cadeia de caracteres na codificação_destino. A codificação de origem é especificada por codificação_origem. Se codificação_origem for omitida, a codificação do banco de dados será utilizada. convert('text_in_unicode', 'UNICODE', 'LATIN1')text_in_unicode com a representação ISO 8859-1
decode(cadeia_de_caracteres text, tipo text) bytea Decodifica os dados binários da cadeia_de_caracteres previamente codificada com encode(). O tipo do parâmetro é o mesmo da da função encode(). decode('MTIzAAE=', 'base64')123\000\001
encode(dados bytea, tipo text) text Codificar os dados binários na representação somente ASCII. Os tipos suportados são: base64, hex e escape. encode('123\\000\\001', 'base64')MTIzAAE=
initcap(text)textConverte a primeira letra de cada palavra (separadas por espaço em branco) em maiúsculainitcap('hi thomas')Hi Thomas
length(cadeia_de_caracteres)integer Comprimento da cadeia de caracteres length('jose')4
lpad(cadeia_de_caracteres text, comprimento integer [, preenchimento text]) text Preenche a cadeia_de_caracteres até o comprimento adicionando os caracteres de preenchimento (espaço por padrão). Se a cadeia_de_caracteres for mais longa que o comprimento então é truncada (à direita). lpad('hi', 5, 'xy')xyxhi
ltrim(cadeia_de_caracteres text, text text)text Remove do início da cadeia de caracteres, a cadeia de caracteres mais longa contendo apenas caracteres de trim ltrim('zzzytrim','xyz')trim
pg_client_encoding()name Nome da codificação atual do cliente pg_client_encoding()SQL_ASCII
quote_ident(cadeia_de_caracteres text)text Retorna a cadeia de caracteres fornecida, devidamente entre aspas, para ser utilizada como identificador em cadeia de caracteres de consulta SQL. As aspas são adicionadas somente quando há necessidade (ou seja, se a cadeia de caracteres contiver caracteres não identificadores ou se acontecer conversão de letras maiúsculas para minúsculas). As aspas internas são devidamente duplicadas. quote_ident('Foo')"Foo"
quote_literal(cadeia_de_caracteres text)text Retorna a cadeia de caracteres fornecida, devidamente entre apóstrofos, para ser utilizada como literal em cadeia de caracteres de consulta SQL. Apóstrofos e contrabarras embutidos são devidamente duplicados. quote_literal('O\'Reilly')'O''Reilly'
repeat(text, integer)textRepete o texto o número de vezesrepeat('Pg', 4)PgPgPgPg
replace(cadeia_de_caracteres text, origem text, destino text)textSubstitui todas as ocorrências de origem na cadeia_de_caracteres por destino replace('abcdefabcdef', 'cd', 'XX')abXXefabXXef
rpad(cadeia_de_caracteres text, comprimento integer [, preenchimento text]) text Preenche a cadeia_de_caracteres até o comprimento adicionando os caracteres de preenchimento (espaço por padrão). Se a cadeia_de_caracteres for mais longa que o comprimento estão é truncada. rpad('hi', 5, 'xy')hixyx
rtrim(cadeia_de_caracteres text, trim text)text Remove do fim da cadeia de caracteres, a cadeia de caracteres mais longa contendo apenas caracteres de trim rtrim('trimxxxx','x')trim
split_part(cadeia_de_caracteres text, delimitador text, coluna integer)textSepara a cadeia_de_caracteres utilizando o delimitador, retornando a coluna especificada (1 para a primeira coluna). split_part('abc~@~def~@~ghi','~@~',2)def
strpos(cadeia_de_caracteres, substring)text Localiza a substring especificada (o mesmo que position(substring in cadeia_de_caracteres), mas deve ser observada a ordem inversa dos argumentos) strpos('high','ig')2
substr(cadeia_de_caracteres, origem [, contador])text Extrai a substring especificada (o mesmo que substring(cadeia_de_caracteres from origem for contador)) substr('alphabet', 3, 2)ph
to_ascii(text [, codificação])text Converte texto em outras codificações em ASCII [a] to_ascii('Karel')Karel
to_hex(número integer ou bigint)textConverte número em sua representação hexadecimal equivalente to_hex(9223372036854775807::bigint)7fffffffffffffff
translate(cadeia_de_caracteres text, origem text, destino text) text Todo caractere da cadeia_de_caracteres, correspondente a um caractere do conjunto origem, é substituído pelo caractere correspondente do conjunto destino. translate('12345', '14', 'ax')a23x5
Notas:
a. A função to_ascii permite conversão de LATIN1, LATIN2 e WIN1250 apenas.

Tabela 6-8. Conversões nativas

Nome da conversão [a] Codificação de origemCodificação de destino
ascii_to_micSQL_ASCIIMULE_INTERNAL
ascii_to_utf_8SQL_ASCIIUNICODE
big5_to_euc_twBIG5EUC_TW
big5_to_micBIG5MULE_INTERNAL
big5_to_utf_8BIG5UNICODE
euc_cn_to_micEUC_CNMULE_INTERNAL
euc_cn_to_utf_8EUC_CNUNICODE
euc_jp_to_micEUC_JPMULE_INTERNAL
euc_jp_to_sjisEUC_JPSJIS
euc_jp_to_utf_8EUC_JPUNICODE
euc_kr_to_micEUC_KRMULE_INTERNAL
euc_kr_to_utf_8EUC_KRUNICODE
euc_tw_to_big5EUC_TWBIG5
euc_tw_to_micEUC_TWMULE_INTERNAL
euc_tw_to_utf_8EUC_TWUNICODE
gb18030_to_utf_8GB18030UNICODE
gbk_to_utf_8GBKUNICODE
iso_8859_10_to_utf_8LATIN6UNICODE
iso_8859_13_to_utf_8LATIN7UNICODE
iso_8859_14_to_utf_8LATIN8UNICODE
iso_8859_15_to_utf_8LATIN9UNICODE
iso_8859_16_to_utf_8LATIN10UNICODE
iso_8859_1_to_micLATIN1MULE_INTERNAL
iso_8859_1_to_utf_8LATIN1UNICODE
iso_8859_2_to_micLATIN2MULE_INTERNAL
iso_8859_2_to_utf_8LATIN2UNICODE
iso_8859_2_to_windows_1250LATIN2WIN1250
iso_8859_3_to_micLATIN3MULE_INTERNAL
iso_8859_3_to_utf_8LATIN3UNICODE
iso_8859_4_to_micLATIN4MULE_INTERNAL
iso_8859_4_to_utf_8LATIN4UNICODE
iso_8859_5_to_koi8_rISO_8859_5KOI8
iso_8859_5_to_micISO_8859_5MULE_INTERNAL
iso_8859_5_to_utf_8ISO_8859_5UNICODE
iso_8859_5_to_windows_1251ISO_8859_5WIN
iso_8859_5_to_windows_866ISO_8859_5ALT
iso_8859_6_to_utf_8ISO_8859_6UNICODE
iso_8859_7_to_utf_8ISO_8859_7UNICODE
iso_8859_8_to_utf_8ISO_8859_8UNICODE
iso_8859_9_to_utf_8LATIN5UNICODE
johab_to_utf_8JOHABUNICODE
koi8_r_to_iso_8859_5KOI8ISO_8859_5
koi8_r_to_micKOI8MULE_INTERNAL
koi8_r_to_utf_8KOI8UNICODE
koi8_r_to_windows_1251KOI8WIN
koi8_r_to_windows_866KOI8ALT
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_INTERNALWIN
mic_to_windows_866MULE_INTERNALALT
sjis_to_euc_jpSJISEUC_JP
sjis_to_micSJISMULE_INTERNAL
sjis_to_utf_8SJISUNICODE
tcvn_to_utf_8TCVNUNICODE
uhc_to_utf_8UHCUNICODE
utf_8_to_asciiUNICODESQL_ASCII
utf_8_to_big5UNICODEBIG5
utf_8_to_euc_cnUNICODEEUC_CN
utf_8_to_euc_jpUNICODEEUC_JP
utf_8_to_euc_krUNICODEEUC_KR
utf_8_to_euc_twUNICODEEUC_TW
utf_8_to_gb18030UNICODEGB18030
utf_8_to_gbkUNICODEGBK
utf_8_to_iso_8859_1UNICODELATIN1
utf_8_to_iso_8859_10UNICODELATIN6
utf_8_to_iso_8859_13UNICODELATIN7
utf_8_to_iso_8859_14UNICODELATIN8
utf_8_to_iso_8859_15UNICODELATIN9
utf_8_to_iso_8859_16UNICODELATIN10
utf_8_to_iso_8859_2UNICODELATIN2
utf_8_to_iso_8859_3UNICODELATIN3
utf_8_to_iso_8859_4UNICODELATIN4
utf_8_to_iso_8859_5UNICODEISO_8859_5
utf_8_to_iso_8859_6UNICODEISO_8859_6
utf_8_to_iso_8859_7UNICODEISO_8859_7
utf_8_to_iso_8859_8UNICODEISO_8859_8
utf_8_to_iso_8859_9UNICODELATIN5
utf_8_to_johabUNICODEJOHAB
utf_8_to_koi8_rUNICODEKOI8
utf_8_to_sjisUNICODESJIS
utf_8_to_tcvnUNICODETCVN
utf_8_to_uhcUNICODEUHC
utf_8_to_windows_1250UNICODEWIN1250
utf_8_to_windows_1251UNICODEWIN
utf_8_to_windows_1256UNICODEWIN1256
utf_8_to_windows_866UNICODEALT
utf_8_to_windows_874UNICODEWIN874
windows_1250_to_iso_8859_2WIN1250LATIN2
windows_1250_to_micWIN1250MULE_INTERNAL
windows_1250_to_utf_8WIN1250UNICODE
windows_1251_to_iso_8859_5WINISO_8859_5
windows_1251_to_koi8_rWINKOI8
windows_1251_to_micWINMULE_INTERNAL
windows_1251_to_utf_8WINUNICODE
windows_1251_to_windows_866WINALT
windows_1256_to_utf_8WIN1256UNICODE
windows_866_to_iso_8859_5ALTISO_8859_5
windows_866_to_koi8_rALTKOI8
windows_866_to_micALTMULE_INTERNAL
windows_866_to_utf_8ALTUNICODE
windows_866_to_windows_1251ALTWIN
windows_874_to_utf_8WIN874UNICODE
Notas:
a. Os nomes das conversões obedecem a um esquema padrão de nomes: O nome oficial da codificação de origem com todos os caracteres não alfanuméricos substituídos por sublinhado, seguido por _to_, seguido pelo nome da codificação de destino processado da mesma forma. Portanto, os nomes podem desviar dos nomes habituais das codificações.