sql >> Databasteknik >  >> RDS >> Oracle

Olika datum Oracle 11g med TOAD

Du gör flera implicita datumkonverteringar i båda versionerna. Detta:

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

motsvarar:

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

medan den andra frågan har en av dem som ersatts med ett specifikt format. Det ser ut som ditt standardformat - som du kan ställa in, tror jag, i Pad-inställningarna utan att ändra registret direkt; det är inte klart om du ens ändrar något relaterat till padda - är DD-MON-RR , som visas genom att koppla in det i dessa frågor:

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 )

Du kan se i denna SQL-fiol att i den första versionen visas datumet som en sträng med årtalet som 49 snarare än 1949 , och det tolkas sedan - av RR mask - som 2049 , vilket är det förväntade beteendet.

Kort version:lita aldrig på implicita datumkonverteringar eller NLS-datumformatmasken.




  1. Postgresql - få den närmaste datetime-raden i förhållande till ett givet datetime-värde

  2. Antalet parametrar stämmer inte överens med antalet värden för lagrad procedur

  3. Ansluta en Bastion Server till en PostgreSQL Server via SSH Tunnel

  4. Gå med där fråga i Laravel returnerar fel tidsstämplar