Oracle
 sql >> Database >  >> RDS >> Oracle

TO_DATE in ORACLE

Le date non hanno un formato:sono rappresentate da 7 o 8 byte .

SELECT DUMP( SYSDATE ) FROM DUAL;

Potrebbe produrre:

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

Questo formato è molto utile per i computer per confrontare le date ma non così utile per le persone; quindi, quando il client SQL (SQL/plus, SQL Developers, TOAD, ecc.) Visualizza una data non visualizza i byte ma la visualizza come una stringa.

Lo fa effettuando una chiamata implicita a TO_CHAR() (o qualche altro metodo interno di stringa di date) e utilizza una maschera di formato predefinita per eseguire questa conversione.

SQL/Plus e SQL Developer utilizzeranno il parametro di sessione dell'utente NLS_DATE_FORMAT per eseguire questa conversione - vedi questa risposta al riguardo.

Quindi la tua seconda query viene implicitamente convertita per fare qualcosa che si avvicina a questo (ma, quasi certamente, in modo più efficiente):

SELECT TO_CHAR(
         TO_DATE('01-01-2015','DD-MM-YYYY'),
         ( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
       )
FROM   DUAL