As funções de formatação do PostgreSQL fornecem um poderoso conjunto de ferramentas para converter vários tipos de dado (date/time, integer, floating point, numeric) em cadeias de caracteres formatadas, e para converter cadeias de caracteres formatadas em tipos de dado específicos. A Tabela 9-22 mostra estas funções, que seguem uma convenção de chamada comum: o primeiro argumento é o valor a ser formatado, e o segundo argumento é o modelo que define o formato da entrada ou da saída.
Tabela 9-22. Funções de formatação
Função | Tipo retornado | Descrição | Exemplo |
---|---|---|---|
to_char (timestamp, text) |
text | converte carimbo do tempo (time stamp) em cadeia de caracteres | to_char(current_timestamp, 'HH12:MI:SS') |
to_char (interval, text) |
text | converte intervalo em cadeia de caracteres | to_char(interval '15h 2m 12s', 'HH24:MI:SS') |
to_char (int, text) |
text | converte inteiro em cadeia de caracteres | to_char(125, '999') |
to_char (double precision, text) |
text | converte real e precisão dupla em cadeia de caracteres | to_char(125.8::real, '999D9') |
to_char (numeric, text) |
text | converte numérico em cadeia de caracteres | to_char(-125.8, '999D99S') |
to_date (text, text) |
date | converte cadeia de caracteres em data | to_date('05 Dec 2000', 'DD Mon YYYY') |
to_timestamp (text, text) |
timestamp | converte cadeia de caracteres em carimbo do tempo | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
to_number (text, text) |
numeric | converte cadeia de caracteres em numérico | to_number('12,454.8-', '99G999D9S') |
Advertência: to_char
(interval, text) está obsoleta, não devendo ser utilizada nas novas aplicações. Será removida na próxima versão.
Em uma cadeia de caracteres modelo de saída (para to_char
), existem certos padrões que são reconhecidos e substituídos pelos dados devidamente formatados a partir do valor a ser formatado. Qualquer texto que não seja um modelo padrão é simplesmente copiado sem alteração. Da mesma forma, em uma cadeia de caracteres modelo de entrada (para qualquer coisa menos to_char
), os modelos padrão identificam as partes da cadeia de caracteres da entrada de dados a serem procuradas, e os valores a serem encontrados nestas partes.
A Tabela 9-23 mostra os modelos padrão disponíveis para formatar valores de data e de hora.
Tabela 9-23. Modelos padrão para formatação de data e hora
Modelo | Descrição |
---|---|
HH | hora do dia (01-12) |
HH12 | hora do dia (01-12) |
HH24 | hora do dia (00-23) |
MI | minuto (00-59) |
SS | segundo (00-59) |
MS | milissegundo (000-999) |
US | microssegundo (000000-999999) |
SSSS | segundos após a meia-noite (0-86399) |
AM ou A.M. ou PM ou P.M. | indicador de meridiano (maiúsculas) |
am ou a.m. ou pm ou p.m. | indicador de meridiano (minúsculas) |
Y,YYY | ano (4 e mais dígitos) com vírgula |
YYYY | ano (4 e mais dígitos) |
YYY | últimos 3 dígitos do ano |
YY | últimos 2 dígitos do ano |
Y | último dígito do ano |
BC ou B.C. ou AD ou A.D. | indicador de era (maiúscula) |
bc ou b.c. ou ad ou a.d. | indicador de era (minúscula) |
MONTH | nome completo do mês em maiúsculas (9 caracteres completado com espaços) |
Month | nome completo do mês em maiúsculas e minúsculas (9 caracteres completado com espaços) |
month | nome completo do mês em minúsculas (9 caracteres completado com espaços) |
MON | nome abreviado do mês em maiúsculas (3 caracteres) |
Mon | nome abreviado do mês em maiúsculas e minúsculas (3 caracteres) |
mon | nome abreviado do mês em minúsculas (3 caracteres) |
MM | número do mês (01-12) |
DAY | nome completo do dia em maiúsculas (9 caracteres completado com espaços) |
Day | nome completo do dia em maiúsculas e minúsculas (9 caracteres completado com espaços) |
day | nome completo do dia em minúsculas (9 caracteres completado com espaços) |
DY | nome abreviado do dia em maiúsculas (3 caracteres) |
Dy | nome abreviado do dia em maiúsculas e minúsculas (3 caracteres) |
dy | nome abreviado do dia em minúsculas (3 caracteres) |
DDD | dia do ano (001-366) |
DD | dia do mês (01-31) |
D | dia da semana (1-7; Domingo é 1) |
W | semana do mês (1-5) onde a primeira semana começa no primeiro dia do mês |
WW | número da semana do ano (1-53) onde a primeira semana começa no primeiro dia do ano |
IW | número da semana do ano ISO (A primeira quinta-feira do novo ano está na semana 1) |
CC | século (2 dígitos) |
J | Dia Juliano (dias desde 1 de janeiro de 4712 AC) |
Q | trimestre |
RM | mês em algarismos romanos (I-XII; I=Janeiro) - maiúsculas |
rm | mês em algarismos romanos (I-XII; I=Janeiro) - minúsculas |
TZ | nome da zona horária - maiúsculas |
tz | nome da zona horária - minúsculas |
Certos modificadores podem ser aplicados aos modelos padrão para alterar seu comportamento. Por exemplo, FMMonth é o modelo "Month" com o modificador "FM". A Tabela 9-24 mostra os modificadores de modelo para formatação de data e hora.
Tabela 9-24. Modificadores de modelo padrão para formatação de data e hora
Modificador | Descrição | Exemplo |
---|---|---|
prefixo FM | modo de preenchimento (suprime completar com brancos e zeros) | FMMonth |
sufixo TH | sufixo de número ordinal maiúsculo | DDTH |
sufixo th | sufixo de número ordinal minúsculo | DDth |
prefixo FX | opção global de formato fixo (veja nota de utilização) | FX Month DD Day |
sufixo SP | modo de falar (spell mode) (ainda não implementado) | DDSP |
Notas sobre a utilização da formatação de data e hora:
to_timestamp
e to_date
saltam espaços em branco múltiplos na cadeia de caracteres de entrada quando a opção FX não é utilizada. O FX deve ser especificado como o primeiro item do modelo; por exemplo, to_timestamp('2000 JUN','YYYY MON') está correto, mas to_timestamp('2000 JUN','FXYYYY MON') retorna erro, porque to_timestamp
espera um único espaço apenas.
to_char
, sendo mostrados literalmente na saída. Uma parte da cadeia de caracteres pode ser colocada entre aspas, para obrigar sua interpretação como um texto literal mesmo contendo palavras chave do modelo. Por exemplo, em '"Hello Year "YYYY', o YYYY será substituído pelo ano do fornecido, mas o único Y em Year não será substituído.
A Tabela 9-25 mostra os modelos padrão disponíveis para formatar valores numéricos.
Tabela 9-25. Modelos padrão para formatação de números
Modelo | Descrição |
---|---|
9 | valor com o número especificado de dígitos |
0 | valor com zeros à esquerda |
. (ponto) | ponto decimal |
, (vírgula) | separador de grupo (milhares) |
PR | valor negativo entre < e > |
S | sinal preso ao número (utiliza a localização) |
L | símbolo da moeda (utiliza a localização) |
D | ponto decimal (utiliza a localização) |
G | separador de grupo (utiliza a localização) |
MI | sinal de menos na posição especificada (se número < 0) |
PL | sinal de mais na posição especificada (se número > 0) |
SG | sinal de mais/menos na posição especificada |
RN [a] | algarismos romanos (entrada entre 1 e 3999) |
TH ou th | sufixo de número ordinal |
V | desloca o número especificado de dígitos (veja as notas sobre utilização) |
EEEE | notação científica (ainda não implementada) |
Notas: a. RN — roman numerals. |
Notas sobre a utilização da formatação numérica:
to_char
não permite o uso de V junto com o ponto decimal (Por exemplo, 99.9V99 não é permitido).
A
Tabela 9-26
mostra alguns exemplos de uso da função to_char
.
Tabela 9-26. Exemplos de utilização da função to_char
Expressão | PostgreSQL 7.4.1 [a] | Oracle 10g (N. do T.) [b] |
---|---|---|
to_char(current_timestamp, 'Day, DD HH12:MI:SS') | 'Friday , 04 02:22:24' | 'Friday , 04 02:22:24' |
to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS') | 'Friday, 4 02:22:24' | 'Friday, 04 02:22:24' |
to_char(-0.1, '99.99') | ' -.10' | ' -.10' |
to_char(-0.1, 'FM9.99') | '-.1' | '-.1' |
to_char(0.1, '0.9') | ' 0.1' | ' 0.1' |
to_char(12, '9990999.9') | ' 0012.0' | ' 0012.0' |
to_char(12, 'FM9990999.9') | '0012.' | '0012.' |
to_char(485, '999') | ' 485' | ' 485' |
to_char(-485, '999') | '-485' | '-485' |
to_char(485, '9 9 9') | ' 4 8 5' | formato inválido |
to_char(1485, '9,999') | ' 1,485' | ' 1,485' |
to_char(1485, '9G999') | ' 1,485' | ' 1,485' |
to_char(148.5, '999.999') | ' 148.500' | ' 148.500' |
to_char(148.5, 'FM999.999') | '148.5' | '148.5' |
to_char(148.5, 'FM999.990') | '148.500' | '148.500' |
to_char(148.5, '999D999') -- com localização | ' 148,500' | ' 148,500' |
to_char(3148.5, '9G999D999') | ' 3,148.500' | ' 3,148.500' |
to_char(-485, '999S') | '485-' | '485-' |
to_char(-485, '999MI') | '485-' | '485-' |
to_char(485, '999MI') | '485 ' | '485 ' |
to_char(485, 'FM999MI') | '485' | '485' |
to_char(485, 'PL999') | '+485' | formato inválido |
to_char(485, 'SG999') | '+485' | formato inválido |
to_char(-485, 'SG999') | '-485' | formato inválido |
to_char(-485, '9SG99') | '4-85' | formato inválido |
to_char(-485, '999PR') | '<485>' | '<485>' |
to_char(485, 'L999') -- com localização | 'R$ 485' | ' R$485' |
to_char(485, 'RN') | ' CDLXXXV' | ' CDLXXXV' |
to_char(485, 'FMRN') | 'CDLXXXV' | 'CDLXXXV' |
to_char(5.2, 'FMRN') | 'V' | 'V' |
to_char(482, '999th') | ' 482nd' | formato inválido |
to_char(485, '"Good number:"999') | 'Good number: 485' | formato inválido |
to_char(485.8, '"Pre:"999" Post:" .999') | 'Pre: 485 Post: .800' | formato inválido |
to_char(12, '99V999') | ' 12000' | ' 12000' |
to_char(12.4, '99V999') | ' 12400' | ' 12400' |
to_char(12.45, '99V9') | ' 125' | ' 125' |
Notas: a. localização — set lc_numeric to 'pt_BR'; set lc_monetary to 'pt_BR'; (N. do T.) b. localização — ALTER SESSION SET NLS_TERRITORY="BRAZIL"; (N. do T.) |