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ção | Tipo retornado | Descrição | Exemplo | Resultado |
---|---|---|---|---|
cadeia_de_caracteres || cadeia_de_caracteres | text | Concatenação de cadeias de caracteres | 'Post' || 'greSQL' | PostgreSQL |
bit_length (cadeia_de_caracteres) | integer | Número de bits na cadeia de caracteres | bit_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) | text | Converte a cadeia de caracteres em letras minúsculas | lower('TOM') | tom |
octet_length (cadeia_de_caracteres) | integer | Número de bytes na cadeia de caracteres | octet_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) | integer | Localização dos caracteres especificados | position('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) | text | Converte a cadeia de caracteres em letras maiúsculas | upper('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ção | Tipo retornado | Descrição | Exemplo | Resultado |
---|---|---|---|---|
ascii (text) | integer | código ASCII do primeiro caractere do argumento | ascii('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) | text | Caractere com o código ASCII fornecido | chr(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) | text | Converte a primeira letra de cada palavra (separadas por espaço em branco) em maiúscula | initcap('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) | text | Repete o texto o número de vezes | repeat('Pg', 4) | PgPgPgPg |
replace (cadeia_de_caracteres text,
origem text,
destino text) | text | Substitui 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) | text | Separa 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) | text | Converte 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 origem | Codificação de destino |
---|---|---|
ascii_to_mic | SQL_ASCII | MULE_INTERNAL |
ascii_to_utf_8 | SQL_ASCII | UNICODE |
big5_to_euc_tw | BIG5 | EUC_TW |
big5_to_mic | BIG5 | MULE_INTERNAL |
big5_to_utf_8 | BIG5 | UNICODE |
euc_cn_to_mic | EUC_CN | MULE_INTERNAL |
euc_cn_to_utf_8 | EUC_CN | UNICODE |
euc_jp_to_mic | EUC_JP | MULE_INTERNAL |
euc_jp_to_sjis | EUC_JP | SJIS |
euc_jp_to_utf_8 | EUC_JP | UNICODE |
euc_kr_to_mic | EUC_KR | MULE_INTERNAL |
euc_kr_to_utf_8 | EUC_KR | UNICODE |
euc_tw_to_big5 | EUC_TW | BIG5 |
euc_tw_to_mic | EUC_TW | MULE_INTERNAL |
euc_tw_to_utf_8 | EUC_TW | UNICODE |
gb18030_to_utf_8 | GB18030 | UNICODE |
gbk_to_utf_8 | GBK | UNICODE |
iso_8859_10_to_utf_8 | LATIN6 | UNICODE |
iso_8859_13_to_utf_8 | LATIN7 | UNICODE |
iso_8859_14_to_utf_8 | LATIN8 | UNICODE |
iso_8859_15_to_utf_8 | LATIN9 | UNICODE |
iso_8859_16_to_utf_8 | LATIN10 | UNICODE |
iso_8859_1_to_mic | LATIN1 | MULE_INTERNAL |
iso_8859_1_to_utf_8 | LATIN1 | UNICODE |
iso_8859_2_to_mic | LATIN2 | MULE_INTERNAL |
iso_8859_2_to_utf_8 | LATIN2 | UNICODE |
iso_8859_2_to_windows_1250 | LATIN2 | WIN1250 |
iso_8859_3_to_mic | LATIN3 | MULE_INTERNAL |
iso_8859_3_to_utf_8 | LATIN3 | UNICODE |
iso_8859_4_to_mic | LATIN4 | MULE_INTERNAL |
iso_8859_4_to_utf_8 | LATIN4 | UNICODE |
iso_8859_5_to_koi8_r | ISO_8859_5 | KOI8 |
iso_8859_5_to_mic | ISO_8859_5 | MULE_INTERNAL |
iso_8859_5_to_utf_8 | ISO_8859_5 | UNICODE |
iso_8859_5_to_windows_1251 | ISO_8859_5 | WIN |
iso_8859_5_to_windows_866 | ISO_8859_5 | ALT |
iso_8859_6_to_utf_8 | ISO_8859_6 | UNICODE |
iso_8859_7_to_utf_8 | ISO_8859_7 | UNICODE |
iso_8859_8_to_utf_8 | ISO_8859_8 | UNICODE |
iso_8859_9_to_utf_8 | LATIN5 | UNICODE |
johab_to_utf_8 | JOHAB | UNICODE |
koi8_r_to_iso_8859_5 | KOI8 | ISO_8859_5 |
koi8_r_to_mic | KOI8 | MULE_INTERNAL |
koi8_r_to_utf_8 | KOI8 | UNICODE |
koi8_r_to_windows_1251 | KOI8 | WIN |
koi8_r_to_windows_866 | KOI8 | ALT |
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 | WIN |
mic_to_windows_866 | MULE_INTERNAL | ALT |
sjis_to_euc_jp | SJIS | EUC_JP |
sjis_to_mic | SJIS | MULE_INTERNAL |
sjis_to_utf_8 | SJIS | UNICODE |
tcvn_to_utf_8 | TCVN | UNICODE |
uhc_to_utf_8 | UHC | UNICODE |
utf_8_to_ascii | UNICODE | SQL_ASCII |
utf_8_to_big5 | UNICODE | BIG5 |
utf_8_to_euc_cn | UNICODE | EUC_CN |
utf_8_to_euc_jp | UNICODE | EUC_JP |
utf_8_to_euc_kr | UNICODE | EUC_KR |
utf_8_to_euc_tw | UNICODE | EUC_TW |
utf_8_to_gb18030 | UNICODE | GB18030 |
utf_8_to_gbk | UNICODE | GBK |
utf_8_to_iso_8859_1 | UNICODE | LATIN1 |
utf_8_to_iso_8859_10 | UNICODE | LATIN6 |
utf_8_to_iso_8859_13 | UNICODE | LATIN7 |
utf_8_to_iso_8859_14 | UNICODE | LATIN8 |
utf_8_to_iso_8859_15 | UNICODE | LATIN9 |
utf_8_to_iso_8859_16 | UNICODE | LATIN10 |
utf_8_to_iso_8859_2 | UNICODE | LATIN2 |
utf_8_to_iso_8859_3 | UNICODE | LATIN3 |
utf_8_to_iso_8859_4 | UNICODE | LATIN4 |
utf_8_to_iso_8859_5 | UNICODE | ISO_8859_5 |
utf_8_to_iso_8859_6 | UNICODE | ISO_8859_6 |
utf_8_to_iso_8859_7 | UNICODE | ISO_8859_7 |
utf_8_to_iso_8859_8 | UNICODE | ISO_8859_8 |
utf_8_to_iso_8859_9 | UNICODE | LATIN5 |
utf_8_to_johab | UNICODE | JOHAB |
utf_8_to_koi8_r | UNICODE | KOI8 |
utf_8_to_sjis | UNICODE | SJIS |
utf_8_to_tcvn | UNICODE | TCVN |
utf_8_to_uhc | UNICODE | UHC |
utf_8_to_windows_1250 | UNICODE | WIN1250 |
utf_8_to_windows_1251 | UNICODE | WIN |
utf_8_to_windows_1256 | UNICODE | WIN1256 |
utf_8_to_windows_866 | UNICODE | ALT |
utf_8_to_windows_874 | UNICODE | WIN874 |
windows_1250_to_iso_8859_2 | WIN1250 | LATIN2 |
windows_1250_to_mic | WIN1250 | MULE_INTERNAL |
windows_1250_to_utf_8 | WIN1250 | UNICODE |
windows_1251_to_iso_8859_5 | WIN | ISO_8859_5 |
windows_1251_to_koi8_r | WIN | KOI8 |
windows_1251_to_mic | WIN | MULE_INTERNAL |
windows_1251_to_utf_8 | WIN | UNICODE |
windows_1251_to_windows_866 | WIN | ALT |
windows_1256_to_utf_8 | WIN1256 | UNICODE |
windows_866_to_iso_8859_5 | ALT | ISO_8859_5 |
windows_866_to_koi8_r | ALT | KOI8 |
windows_866_to_mic | ALT | MULE_INTERNAL |
windows_866_to_utf_8 | ALT | UNICODE |
windows_866_to_windows_1251 | ALT | WIN |
windows_874_to_utf_8 | WIN874 | UNICODE |
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. |