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

Função TO_DATE no ORACLE


As datas não têm formato - elas são representadas por 7 ou 8 bytes .
SELECT DUMP( SYSDATE ) FROM DUAL;

Pode produzir:
Typ=13 Len=8: 220,7,11,26,16,41,9,0

Este formato é muito útil para computadores compararem datas, mas não é tão útil para pessoas; portanto, quando o cliente SQL (SQL/plus, SQL Developers, TOAD, etc) exibe uma data, ele não exibe os bytes, mas o exibe como uma string.

Ele faz isso fazendo uma chamada implícita para TO_CHAR() (ou algum outro método interno de stringificação de datas) e usa uma máscara de formato padrão para realizar essa conversão.

SQL/Plus e SQL Developer usarão o parâmetro de sessão do usuário NLS_DATE_FORMAT para realizar essa conversão - consulte esta resposta em relação a este.

Portanto, sua segunda consulta está sendo convertida implicitamente para fazer algo parecido com isso (mas, quase certamente, com mais eficiência):
SELECT TO_CHAR(
         TO_DATE('01-01-2015','DD-MM-YYYY'),
         ( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
       )
FROM   DUAL