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

Forskellige datoer Oracle 11g med TOAD

Du laver flere implicitte datokonverteringer i begge versioner. Dette:

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

svarer til:

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

hvorimod den anden forespørgsel har en af ​​dem erstattet med et specifikt format. Det ligner dit standardformat - som du kan indstille, tror jeg, i Toad-præferencerne uden at ændre registreringsdatabasen direkte; det er ikke klart, om du overhovedet ændrer noget relateret til Toad - er DD-MON-RR , som vist ved at tilslutte det til disse forespørgsler:

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 denne SQL Fiddle at i den første version vises datoen som en streng med året som 49 i stedet for 1949 , og det fortolkes så - af RR maske - som 2049 , som er den forventede adfærd.

Kort version:Stol aldrig på implicitte datokonverteringer eller NLS-datoformatmasken.




  1. Indstil en standardrækkeforhåndshentning i SQL Server ved hjælp af JDBC-driver

  2. Sådan erstattes en kommasepareret værdi i tabelkolonnen med brugerinputværdien oracle

  3. Hvad forårsager forskellen mellem CPU-tid og Forløbet tid i Oracle tkprof-filer

  4. Hvordan opretter man forbindelse til IPv6-adresser i Kubernetes, der kører på Google Container Engine?