Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TO_CHAR(datetime) no Oracle


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 de DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE tipo de dados
  • interval pode ser um valor de INTERVAL DAY TO SECOND , ou INTERVAL YEAR TO MONTH tipo de dados
  • fmt é 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 e TIMESTAMP 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: