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

Ude af stand til at forstå, hvordan værdi konverteres til datoformat implicit

String-to-Date-konverteringsreglerne tillade yderligere formateringsregler (uden at der anvendes andre modifikatorer). Så:

  • MM matcher også MON og MONTH;
  • MON matcher MONTH (og omvendt);
  • RR matcher RRRR; og
  • Tekkesætningen er valgfri.

Så:

SELECT TO_DATE( '10AUGUST2016', 'DD-MM-RR'    ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MON-RR'   ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MONTH-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MM-RR'    ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MON-RR'   ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MONTH-RR' ) FROM DUAL;

Alle genererer datoen 2016-08-10T00:00:00 .

Du kan forhindre dette ved at bruge FX formatmodel

Så:

SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR'    ) FROM DUAL;

Giver:ORA-01858: a non-numeric character was found where a numeric was expected og ville kun matche, hvor der findes et nøjagtigt mønstermatch (selvom RR vil stadig matche RRRR ).

Ja, oracle bruger implicit TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) for at udføre konverteringen.

Hvis du bruger:

ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';

Så mislykkes din indsættelse.




  1. Pythons MySQLdb kan ikke finde libmysqlclient.dylib med hjemmebrygget MySQL

  2. Ingen passende driver fundet til 'jdbc:mysql://localhost:3306/mysql

  3. Mysql Codeigniter Active Record - Hvordan laver jeg en where_in-forespørgsel og returnerer den korrekte rækkefølge af resultater?

  4. Hvordan slipper jeg en fremmednøgle i SQL Server?