Esta seção descreve as funções e operadores disponíveis para
examinar e tratar valores cadeia de caracteres.
Neste contexto, cadeia de caracteres inclui todos os valores dos
tipos de dados character, character varying
e text.
Exceto onde indicado, estas funções e operadores são declarados para
aceitar e retornar o tipo de dados text.
Também aceitam indistintamente argumentos do tipo de dados
character varying.
Valores do tipo de dados character são convertidos no
tipo de dados text antes que a função ou o operador
seja aplicado, resultando na remoção de quaisquer espaços à direita
no valor do tipo de dados character.
O padrão SQL define algumas funções de cadeia de caracteres que usam palavras-chave, em vez de vírgulas, para separar os argumentos. Os detalhes se encontram na Tabela 9.9. O PostgreSQL também fornece versões destas funções que usam a sintaxe de chamada de função regular (veja a Tabela 9.10).
O operador de concatenação de cadeias de caracteres
(||) aceita uma entrada que não é uma cadeia de
caracteres, desde que pelo menos uma das entradas seja do tipo
cadeia de caracteres, conforme descrito na
Tabela 9.9.
Para os outros casos, pode ser adicionada uma conversão
explícita para o tipo de dados text, para que a
entrada que não é uma cadeia de caracteres seja aceita.
Tabela 9.9. Funções e operadores SQL de cadeia de caracteres
Função/Operador Descrição Exemplo(s) |
|---|
|
Concatena as duas cadeias de caracteres.
|
Converte a entrada não-cadeia de caracteres em texto e, em
seguida, concatena as duas cadeias de caracteres.
(A entrada não-cadeia de caracteres não pode ser do tipo matriz,
porque isto criaria ambiguidade com os operadores de matriz
|
Remove do início e do fim da
|
Verifica se a cadeia de caracteres está no formato de
normalização Unicode especificado.
A palavra-chave opcional
|
|
Retorna o número de bits na cadeia de caracteres
(8 vezes o
|
Retorna o número de caracteres na cadeia de caracteres.
|
|
Converte a cadeia de caracteres para letras minúsculas, de acordo com as regras de localidade do banco de dados.
|
Estende a
|
Remove do início da
|
Converte a cadeia de caracteres para o formato de normalização
Unicode especificado.
A palavra chave opcional
|
Retorna o número de bytes na cadeia de caracteres.
|
Retorna o número de bytes na cadeia de caracteres.
Como esta versão da função aceita diretamente o tipo de dados
|
Substitui a sub-cadeia de caracteres de
|
Retorna a posição do primeiro início da
|
Estende a
|
Remove do fim da
|
Extrai a sub-cadeia de caracteres da
|
Extrai a primeira sub-cadeia de caracteres que corresponde
à expressão regular
|
Extrai a primeira sub-cadeia de caracteres que corresponde à expressão regular SQL; veja a Seção 9.7.2. A primeira forma está especificada desde o SQL:2003; a segunda forma existia apenas no SQL:1999 devendo ser considerado obsoleta.
|
Remove a cadeia de caracteres mais longa contendo apenas os
caracteres em
|
Esta é uma sintaxe fora do padrão para
|
Retorna |
|
Converte a cadeia de caracteres para letras maiúsculas, de acordo com as regras de localidade do banco de dados.
|
Estão disponíveis as funções adicionais para manejo de cadeia de caracteres listadas na Tabela 9.10. (Algumas delas são usadas internamente para implementar as funções de cadeia de caracteres padrão SQL listadas na Tabela 9.9.) Existem também operadores de correspondência de padrões, que são descritos na Seção 9.7, e operadores para procura de texto completo que são descritos no Capítulo 12.
Tabela 9.10. Outras funções e operadores de cadeias de caracteres
Função Descrição Exemplo(s) |
|---|
|
Retorna verdade se a primeira cadeia de caracteres começar
com a segunda cadeia de caracteres.
(equivalente à função
|
|
Retorna o código numérico do primeiro caractere do argumento.
Na codificação UTF8, retorna o ponto de
código
|
|
Retorna o caractere com o código fornecido.
Na codificação UTF8, o argumento é tratado
como um ponto de código
|
Concatena as representações textuais de todos os argumentos.
Argumentos
|
Concatena todos os argumentos, exceto o primeiro, com separadores.
O primeiro argumento é usado como cadeia de caracteres separadora
e não deve ser
|
Formata os argumentos de acordo com a cadeia de caracteres de
formatação; veja a Seção 9.4.1.
Esta função é semelhante à função
|
|
Converte a primeira letra de cada palavra para maiúscula e as restantes para minúscula. As palavras são sequências de caracteres alfanuméricos separados por caracteres não alfanuméricos.
|
|
Executa a dobragem de caixa (maiúsculas/minúsculas) da cadeia
de caracteres de entrada de acordo com a sequência de ordenação
[a].
A dobragem de caixa é semelhante à conversão de caixa,
mas o objetivo da dobragem de caixa é facilitar a
correspondência de cadeias de caracteres sem distinção de
caixa entre elas, enquanto o objetivo da conversão de caixa
é converter para uma forma específica caixa.
Esta função só pode ser usada quando a codificação do servidor
for Normalmente, a dobragem de caixa simplesmente converte para minúsculas, mas pode haver exceções dependendo da sequência de ordenação. Por exemplo, alguns caracteres têm mais de duas variantes minúsculas ou se transformam em maiúsculas.
A dobragem da caixa pode alterar o comprimento da cadeia de
caracteres. Por exemplo, na sequência de ordenação
A função
O provedor |
Retorna os primeiros
|
|
Retorna o número de caracteres na cadeia de caracteres.
|
|
Calcula o hash MD5 do argumento, com o resultado escrito em hexadecimal.
|
Divide o
|
|
Retorna o nome da codificação do cliente corrente.
|
|
Retorna a cadeia de caracteres fornecida, adequadamente delimitada para ser usada como identificador em uma cadeia de caracteres de uma instrução SQL. São adicionadas aspas apenas se necessário (ou seja, se a cadeia de caracteres contiver caracteres não identificadores, ou sofrer dobra de caixa). As aspas incorporadas são devidamente duplicadas. Veja também o Exemplo 41.1.
|
|
Retorna a cadeia de caracteres fornecida, adequadamente delimitada
para ser usada como literal cadeia de caracteres em uma cadeia
de caracteres de instrução SQL.
Apóstrofos e contrabarras incorporados são duplicados de forma
apropriada.
Note que a função
|
Converte o valor fornecido em texto e o delimita como literal. Apóstrofos e contrabarras incorporadas são duplicadas devidamente.
|
Retorna a cadeia de caracteres fornecida adequadamente delimitada
para ser usada como um literal cadeia de caracteres em uma
cadeia de caracteres de instrução SQL;
ou, se o argumento for nulo, retorna
|
Converte o valor fornecido em texto e o delimita como literal;
ou, se o argumento for nulo, retorna
|
Retorna o número de vezes que a expressão regular
|
Retorna a posição dentro da
|
Verifica existe uma correspondência da expressão regular
|
Retorna as sub-cadeias de caracteres da primeira
correspondência da expressão regular
|
Retorna as sub-cadeias de caracteres da primeira
correspondência da expressão regular
{bar}
{baz}
|
Substitui a sub-cadeia de caracteres que é a primeira
correspondência da expressão regular
|
Substitui a sub-cadeia de caracteres que é a
|
Divide a
|
Divide a
hello world
|
Retorna a sub-cadeia de caracteres de
|
Repete a
|
Substitui todas as ocorrências na
|
|
Inverte a ordem dos caracteres na sequência.
|
Retorna os últimos
|
Divide a
|
Retorna verdade se a
|
Divide a
|
Divide a
xx NULL zz
|
Retorna a primeira posição do início da
|
Extrai a sub-cadeia de caracteres de
|
Converte
|
|
Converte o número para sua representação binária equivalente em complemento de dois [b].
|
|
Converte o número para sua representação hexadecimal equivalente em complemento de dois.
|
|
Converte o número para sua representação octal equivalente em complemento de dois.
|
Substitui cada caractere na
|
|
Avalia os caracteres
Se a codificação do servidor não for UTF-8, o ponto de código
Esta função fornece uma alternativa (fora do padrão) para
constantes de cadeia de caracteres com escapes
|
[a] O gerenciador de banco de dados compara dados de caracteres usando uma sequência de ordenação. Esta sequência define a ordem de um conjunto de caracteres, determinando se um caractere específico será classificado em posição superior, inferior ou igual a outro. IBM - Collating sequences |
As funções concat, concat_ws
e format são mutáveis, então é possível passar
os valores a serem concatenados ou formatados como uma matriz marcada
com a palavra-chave VARIADIC
(veja Seção 36.5.6).
Para a função, os elementos da matriz são tratados como se fossem
argumentos comuns separados.
Se o argumento matriz VARIADIC for NULL,
concat e concat_ws
retornam NULL, mas format trata NULL como uma
matriz de zero elementos.
Veja também a função de agregação string_agg em
Seção 9.21, e as funções de conversão
entre cadeias de caracteres e o tipo de dados bytea na
Tabela 9.13.
format #
A função format produz uma saída formatada
segundo a cadeia de caracteres de formatação, em um estilo
semelhante ao da função sprintf da linguagem
C.
format(formatstrtext[,formatarg"any"[, ...] ])
onde formatstr é a cadeia de caracteres de
formatação, que determina como o resultado deve ser formatado.
O texto na cadeia de caracteres de formatação é copiado diretamente
para o resultado, exceto onde são usados
especificadores de formatação.
Os especificadores de formatação atuam como espaços reservados na
cadeia de caracteres, definindo como os argumentos subsequentes
da função devem ser formatados e inseridos no resultado.
Cada formatarg é convertido em texto
conforme as regras de saída usuais para o seu tipo de dados e,
em seguida, formatado e inserido na cadeia de caracteres de
resultado segundo o(s) especificador(es) de formatação.
Os especificadores de formatação são introduzidos pelo caractere
% e têm a forma
%[posição][sinalizadores][largura]tipo
onde os campos componentes são:
posição (opcional)
Uma cadeia de caracteres na forma
onde
n$n é a posição do argumento a ser impresso.
A posição 1 significa o primeiro argumento após o
formatstr.
Se a posição for omitida,
o padrão é usar o próximo argumento na sequência.
sinalizadores (opcional)
Opções adicionais que controlam como a saída do especificador
de formatação é formatada.
No momento, o único sinalizador com suporte é o sinal de menos
(-), que faz com que a saída do especificador
de formatação seja justificada à esquerda.
Esse sinalizador não tem efeito, a menos que o campo
largura também seja especificado.
largura (opcional)
Especifica o número mínimo de caracteres
a serem usados para exibir a saída do especificador de formatação.
A saída é preenchida à esquerda ou à direita
(dependendo do sinalizador -),
com espaços conforme seja necessário para preencher a largura.
Uma largura muito pequena não causa truncamento da saída,
é simplesmente ignorada.
A largura pode ser especificada usando qualquer uma das
seguintes opções: um inteiro positivo; um asterisco
(*) para usar o próximo argumento da função
como largura; ou uma cadeia de caracteres na forma
* para usar o
n$n-ésimo argumento da função como largura.
Se a largura vier de um argumento da função, esse argumento
será consumido antes do argumento usado para o valor do
especificador de formatação.
Se o argumento de largura for negativo, o resultado será
alinhado à esquerda (como se o sinalizador -
tivesse sido especificado) dentro de um campo de comprimento
abs(largura).
tipo (requerido)O tipo de conversão de formato a ser usado para produzir a saída do especificador de formatação. Os seguintes tipos têm suporte:
s formata o valor do argumento como uma
cadeia de caracteres simples.
O valor nulo é tratado como uma cadeia de caracteres vazia.
I trata o valor do argumento como
um identificador SQL, colocando-o entre
aspas, se for necessário. É errado o valor ser nulo
(equivalente a quote_ident).
L delimita o valor do argumento como um
literal SQL.
O valor nulo é mostrado como a cadeia de caracteres
NULL, sem aspas (equivalente a
quote_nullable).
Além dos especificadores de formatação descritos acima, a sequência
especial %% pode ser usada para produzir o
caractere literal %.
Abaixo estão alguns exemplos das conversões básicas de formato:
SELECT format('Hello %s', 'World');
→ Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');
→ Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');
→ INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files');
→ INSERT INTO locations VALUES('C:\Program Files')
Abaixo estão alguns exemplos usando o campo
largura e o sinalizador -:
SELECT format('|%10s|', 'foo');
→ | foo|
SELECT format('|%-10s|', 'foo');
→ |foo |
SELECT format('|%*s|', 10, 'foo');
→ | foo|
SELECT format('|%*s|', -10, 'foo');
→ |foo |
SELECT format('|%-*s|', 10, 'foo');
→ |foo |
SELECT format('|%-*s|', -10, 'foo');
→ |foo |
Estes exemplos mostram o uso do campo
posição:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three');
→ Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar');
→ | bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar');
→ | foo|
Diferentemente da função padrão sprintf da
linguagem C, a função format do
PostgreSQL permite que especificadores de
formatação com e sem o campo posição sejam
misturados na mesma cadeia de caracteres de formatação.
Um especificador de formatação sem o campo
posição sempre usa o próximo argumento após
o último argumento consumido.
Além disso, a função format não requer que
todos os argumentos da função sejam usados na cadeia de caracteres
de formatação. Por exemplo:
SELECT format('Testando %3$s, %2$s, %s', 'um', 'dois', 'três');
→ Testando três, dois, três
Os especificadores de formatação %I e
%L são particularmente úteis para a construção
segura de instruções SQL dinâmicas.
Veja o Exemplo 41.1.