Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie można zrozumieć, w jaki sposób wartość przekonwertowana na format daty niejawnie

Zasady konwersji ciąg na datę zezwól na dodatkowe reguły formatowania (bez stosowania innych modyfikatorów). A więc:

  • MM pasuje również do MON i MONTH;
  • MON pasuje do MONTH (i odwrotnie);
  • RR pasuje do RRRR; i
  • Interpunkcja jest opcjonalna.

A więc:

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;

Wszystkie generują datę 2016-08-10T00:00:00 .

Możesz temu zapobiec, używając FX model formatu

Następnie:

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

Daje:ORA-01858: a non-numeric character was found where a numeric was expected i pasowałby tylko tam, gdzie znaleziono dokładne dopasowanie wzorca (chociaż RR nadal będzie pasować do RRRR ).

Tak, Oracle niejawnie używa TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) aby dokonać konwersji.

Jeśli używasz:

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

Wtedy wstawka się nie powiedzie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL 'AND' lub 'OR' jest na pierwszym miejscu?

  2. Jak wypełnić zbiór danych za pomocą C# z bazy danych Oracle

  3. Błąd:ORA-00955:nazwa jest już używana przez istniejący obiekt w funkcji Oracle

  4. SQL Dev 4.2 Top SQL

  5. Napotkany błąd SQL:ORA-01843:niepoprawny miesiąc