No Oracle Database, o
TO_CHAR(datetime)
função converte um valor de data e hora ou intervalo em um VARCHAR2
valor no formato especificado pelo formato de data. Sintaxe
A sintaxe fica assim:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Onde:
datetime
pode ser um valor deDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
tipo de dadosinterval
pode ser um valor deINTERVAL
DAY
TO
SECOND
, ouINTERVAL
YEAR
TO
MONTH
tipo de dadosfmt
é um modelo de formato opcional que especifica como o resultado deve ser formatado'nlsparam'
é um argumento opcional que especifica o idioma no qual os nomes e abreviações de mês e dia são retornados.
Exemplo
Segue um exemplo para demonstrar:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Resultado:
WED, 26 SEPTEMBER 2035
Assim, ele retornou a data fornecida no primeiro argumento, no formato especificado pelo segundo argumento.
O segundo argumento fornece o modelo de formato. O modelo de formato pode consistir em um ou mais elementos de formato. Por exemplo,
DY
é um elemento de formato, assim como DD
, MONTH
, etc Veja esta lista completa de elementos de formato de data e hora no Oracle para obter uma lista de elementos de formato que podem ser usados para formatar valores de data e hora com esta função.
Formato padrão
Se você omitir o
fmt
argumento, o resultado será convertido da seguinte forma:DATE
os valores são convertidos em valores no formato de data padrão.TIMESTAMP
eTIMESTAMP
WITH
LOCAL
TIME
ZONE
os valores são convertidos em valores no formato de carimbo de data/hora padrão.TIMESTAMP
WITH
TIME
ZONE
os valores são convertidos em valores no carimbo de data/hora padrão com formato de fuso horário.- Os valores de intervalo são convertidos na representação numérica do literal de intervalo.
Aqui está um exemplo de conversão de um
DATE
valor sem especificar o formato:SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Resultado:
26/SEP/35
Nesse caso, o formato de data padrão da minha sessão é
DD/MON/RR
, e o resultado reflete isso. Sei que este é o formato de data padrão da minha sessão porque consultei o V$NLS_PARAMETERS
view, que me mostra o valor atual dos parâmetros NLS. Consulte Como verificar os valores dos parâmetros NLS se precisar verificá-los.
Consulte também Como alterar o formato de data da sua sessão se quiser alterar o formato de data e hora padrão para sua sessão atual.
Intervalo
Aqui está um exemplo que gera um valor de intervalo no formato padrão:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Resultado:
+25-02
O 'nlsparam'
Argumento
O
'nlsparam'
O argumento especifica o idioma no qual os nomes e abreviações de mês e dia são retornados. Este argumento pode ter a seguinte forma:'NLS_DATE_LANGUAGE = language'
Exemplo:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Resultado:
MIÉ, 26 SEPTIEMBRE 2035
Argumentos nulos
Passando
null
resulta em null
:SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Resultado:
null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumento ausente
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT TO_CHAR()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TO_CHAR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Passar muitos argumentos também resulta em um erro:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' ) FROM DUAL Error at Command Line : 1 Column : 72 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: