Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction TO_DATE dans ORACLE

Les dates n'ont pas de format - elles sont représentées par 7 ou 8 octets .

SELECT DUMP( SYSDATE ) FROM DUAL;

Peut afficher :

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

Ce format est très utile pour les ordinateurs pour comparer les dates mais pas si utile pour les gens; ainsi, lorsque le client SQL (SQL/plus, SQL Developers, TOAD, etc.) affiche une date, il n'affiche pas les octets mais l'affiche sous forme de chaîne.

Il le fait en faisant un appel implicite à TO_CHAR() (ou une autre méthode interne de stringification des dates) et utilise un masque de format par défaut pour effectuer cette conversion.

SQL/Plus et SQL Developer utiliseront le paramètre de session de l'utilisateur NLS_DATE_FORMAT pour effectuer cette conversion - voir cette réponse à ce sujet.

Donc, votre deuxième requête est implicitement convertie pour faire quelque chose qui s'en rapproche (mais, presque certainement, plus efficacement) :

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