6.7. Funções para formatar tipos de dado

As funções de formatação do PostgreSQL disponibilizam um poderoso conjunto de ferramentas para converter diversos tipos de dado (date/time, integer, floating point, numeric) em cadeias de caracteres formatadas, e para converter cadeias de caracteres formatadas nos tipos de dado especificados. A Tabela 6-12 mostra estas funções, que seguem uma convenção de chamada comum: o primeiro argumento é o valor a ser formatado, e o segundo argumento é a máscara que define o formato da entrada ou da saída.

Tabela 6-12. Funções de formatação

FunçãoRetornaDescriçãoExemplo
to_char(timestamp, text)textconverte carimbo de tempo (time stamp) em cadeia de caracteresto_char(timestamp 'now','HH12:MI:SS')
to_char(interval, text)textconverte intervalo em cadeia de caracteresto_char(interval '15h 2m 12s','HH24:MI:SS')
to_char(int, text)textconverte inteiro em cadeia de caracteresto_char(125, '999')
to_char(double precision, text)textconverte real e precisão dupla em cadeia de caracteresto_char(125.8, '999D9')
to_char(numeric, text)textconverte numérico em cadeia de caracteresto_char(numeric '-125.8', '999D99S')
to_date(text, text)dateconverte cadeia de caracteres em datato_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text)timestampconverte cadeia de caracteres em carimbo de tempoto_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)numericconverte cadeia de caracteres em numéricoto_number('12,454.8-', '99G999D9S')

Na cadeia de caracteres usada como máscara de saída, existem certos elementos que são reconhecidos e substituídos pelos dados devidamente formatados a partir do valor a ser formatado. Qualquer texto que não faça parte de um elemento da máscara é simplesmente copiado sem alteração. Da mesma forma, na cadeia de caracteres usada como máscara de entrada, os elementos da máscara identificam as partes procuradas na cadeia de caracteres da entrada, e os valores a ser encontrados nestas posições.

A Tabela 6-13 mostra os elementos que podem ser utilizados na máscara para formatar valores de data e de hora.

Tabela 6-13. Elementos para máscara de conversão de data e hora

ElementoDescrição
HHhora do dia (01-12)
HH12hora do dia (01-12)
HH24hora do dia (00-23)
MIminuto (00-59)
SSsegundo (00-59)
MSmilissegundo (000-999)
USmicrossegundo (000000-999999)
SSSSsegundos 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,YYYano (4 e mais dígitos) com vírgula
YYYYano (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)
MONTHnome completo do mês em maiúsculas (9 caracteres completado com espaços)
Monthnome completo do mês em maiúsculas e minúsculas (9 caracteres completado com espaços)
monthnome completo do mês em minúsculas (9 caracteres completado com espaços)
MONnome abreviado do mês em maiúsculas (3 caracteres)
Monnome abreviado do mês em maiúsculas e minúsculas (3 caracteres)
monnome abreviado do mês em minúsculas (3 caracteres)
MMnúmero do mês (01-12)
DAYnome completo do dia em maiúsculas (9 caracteres completado com espaços)
Daynome completo do dia em maiúsculas e minúsculas (9 caracteres completado com espaços)
daynome completo do dia em minúsculas (9 caracteres completado com espaços)
DYnome abreviado do dia em maiúsculas (3 caracteres)
Dynome abreviado do dia em maiúsculas e minúsculas (3 caracteres)
dynome abreviado do dia em minúsculas (3 caracteres)
DDDdia do ano (001-366)
DDdia do mês (01-31)
Ddia da semana (1-7; SUN=1)
Wsemana do mês (1-5) onde a primeira semana começa no primeiro dia do mês
WWnúmero da semana do ano (1-53) onde a primeira semana começa no primeiro dia do ano
IWnúmero da semana do ano ISO (A primeira quinta-feira do novo ano está na semana 1)
CCséculo (2 dígitos)
JDia Juliano (dias desde 1 de janeiro de 4712 AC)
Qtrimestre
RMmês em algarismos romanos (I-XII; I=Janeiro) - maiúsculas
rmmês em algarismos romanos (I-XII; I=Janeiro) - minúsculas
TZzona horária - maiúsculas
tzzona horária - minúsculas

Certos modificadores podem ser aplicados a qualquer elemento da máscara para alterar seu comportamento. Por exemplo, "FMMonth" é o elemento "Month" com o prefixo "FM". A Tabela 6-14 mostra os modificadores de elemento para formatação de data e hora.

Tabela 6-14. Modificadores dos elementos das máscara de conversão de data e hora

ModificadorDescriçãoExemplo
prefixo FMmodo de preenchimento (suprime completar com brancos e zeros)FMMonth
sufixo THadicionar o sufixo de número ordinal em maiúsculasDDTH
sufixo thadicionar o sufixo de número ordinal em minúsculasDDth
prefixo FXopção global de formato fixo (veja nota de utilização)FX Month DD Day
sufixo SPmodo de falar (spell mode) (ainda não implementado)DDSP

Notas relativas à utilização da formatação de data e hora:

A Tabela 6-15 mostra os elementos usados nas máscaras disponíveis para formatar valores numéricos.

Tabela 6-15. Elementos para máscara de conversão numérica

ElementoDescrição
9valor com o número especificado de dígitos
0valor com zeros à esquerda
. (ponto)ponto decimal
, (vírgula)separador de grupo (milhares)
PRvalor negativo entre chaves
Svalor negativo com o sinal de menos (utiliza a localização)
Lsímbolo da moeda (utiliza a localização)
Dponto decimal (utiliza a localização)
Gseparador de grupo (utiliza a localização)
MIsinal de menos na posição especificada (se número < 0)
PLsinal de mais na posição especificada (se número > 0)
SGsinal de mais/menos na posição especificada
RNalgarismos romanos (entrada entre 1 e 3999)
TH ou thconverte em número ordinal
Vdesloca n dígitos (veja as notas)
EEEEnotação científica (ainda não implementada)

Notas relativas à utilização da formatação numérica:

A Tabela 6-16 mostra alguns exemplos de utilização da função to_char.

Tabela 6-16. Exemplos da função to_char

EntradaSaída
to_char(now(),'Day, DD HH12:MI:SS')'Tuesday , 06 05:39:18'
to_char(now(),'FMDay, FMDD HH12:MI:SS')'Tuesday, 6 05:39:18'
to_char(-0.1,'99.99')' -.10'
to_char(-0.1,'FM9.99')'-.1'
to_char(0.1,'0.9')' 0.1'
to_char(12,'9990999.9')' 0012.0'
to_char(12,'FM9990999.9')'0012'
to_char(485,'999')' 485'
to_char(-485,'999')'-485'
to_char(485,'9 9 9')' 4 8 5'
to_char(1485,'9,999')' 1,485'
to_char(1485,'9G999')' 1 485'
to_char(148.5,'999.999')' 148.500'
to_char(148.5,'999D999')' 148,500'
to_char(3148.5,'9G999D999')' 3 148,500'
to_char(-485,'999S')'485-'
to_char(-485,'999MI')'485-'
to_char(485,'999MI')'485'
to_char(485,'PL999')'+485'
to_char(485,'SG999')'+485'
to_char(-485,'SG999')'-485'
to_char(-485,'9SG99')'4-85'
to_char(-485,'999PR')'<485>'
to_char(485,'L999')'DM 485
to_char(485,'RN')' CDLXXXV'
to_char(485,'FMRN')'CDLXXXV'
to_char(5.2,'FMRN')V
to_char(482,'999th')' 482nd'
to_char(485, '"Good number:"999')'Good number: 485'
to_char(485.8,'"Pre:"999" Post:" .999')'Pre: 485 Post: .800'
to_char(12,'99V999')' 12000'
to_char(12.4,'99V999')' 12400'
to_char(12.45, '99V9')' 125'