sql >> Databáze >  >> RDS >> Oracle

Různá data Oracle 11g s TOAD

V obou verzích provádíte několik implicitních převodů data. Toto:

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

je ekvivalentní:

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

zatímco druhý dotaz má jeden z dotazů nahrazený specifickým formátem. Vypadá to jako váš výchozí formát – který, věřím, můžete nastavit v předvolbách Toad, aniž byste museli přímo upravovat registr; není jasné, jestli vůbec upravujete něco, co souvisí s Toad - je DD-MON-RR , jak ukazuje zapojení do těchto dotazů:

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 )

Můžete to vidět v této SQL Fiddle že v první verzi se datum zobrazuje jako řetězec s rokem jako 49 spíše než 1949 , a to je pak interpretováno - pomocí RR maska ​​- jako 2049 , což je očekávané chování.

Krátká verze:nikdy se nespoléhejte na implicitní převody data nebo masku formátu data NLS.




  1. Aktualizace testovacích nástrojů PostgreSQL s archivem benchmarků

  2. Nejlepší způsob, jak počítat řádky z databáze mysql

  3. Potřebujete najít další a předchozí pracovní den v oracle

  4. Kouzlo DUALu