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

Date diverse Oracle 11g con TOAD

Stai eseguendo più conversioni di date implicite in entrambe le versioni. Questo:

SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL; 

equivale a:

SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
    <NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;

mentre la seconda query ne ha una di quelle sostituite con un formato specifico. Sembra il tuo formato predefinito - che puoi impostare, credo, nelle preferenze di Toad senza modificare direttamente il registro; non è chiaro se stai anche modificando qualcosa relativo a Toad - è DD-MON-RR , come mostrato collegandolo a queste query:

SELECT to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
        'DD-MON-RR'),'DD-MON-RR') AS date1,
    to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
        'dd-MON-yyyy'),'DD-MON-RR') AS date2 FROM DUAL;

DATE1                            DATE2
February, 01 2049 00:00:00+0000  February, 01 1949 00:00:00+0000

(SQL Fiddle )

Puoi vedere in questo SQL Fiddle che nella prima versione la data appare come una stringa con l'anno come 49 anziché 1949 , e questo viene quindi interpretato - dal RR maschera - come 2049 , che è il comportamento previsto.

Versione breve:non fare mai affidamento sulle conversioni di data implicite o sulla maschera del formato della data NLS.