9.8. Funções para formatar tipo de dado

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 with time zone 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 nos novos aplicativos. 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
IYYY ano ISO (4 ou mais dígitos)
IYY últimos 3 dígitos do ano ISO
IY últimos 2 dígitos do ano ISO
I último dígito do ano ISO
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:

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 o idioma)
L símbolo da moeda (utiliza o idioma)
D ponto decimal (utiliza o idioma)
G separador de grupo (utiliza o idioma)
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:

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 8.0.0 [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 idioma ' 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 idioma '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. idioma — set lc_numeric to 'pt_BR'; set lc_monetary to 'pt_BR'; (N. do T.)
b. idioma — ALTER SESSION SET NLS_TERRITORY="BRAZIL"; (N. do T.)
SourceForge.net Logo CSS válido!