Oracle
 sql >> база данни >  >> RDS >> Oracle

Не може да се разбере как стойността се преобразува имплицитно във формат на дата

Правила за преобразуване от низ към дата позволява допълнителни правила за форматиране (без да се прилагат други модификатори). И така:

  • MM също съответства на MON и MONTH;
  • MON съответства на MONTH (и обратно);
  • RR съвпада с RRRR; и
  • Пунктуацията не е задължителна.

И така:

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;

Всички генерират датата 2016-08-10T00:00:00 .

Можете да предотвратите това, като използвате FX модел на формат

След това:

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

Дава:ORA-01858: a non-numeric character was found where a numeric was expected и ще съвпадне само там, където е намерено точно съвпадение на шаблон (въпреки че RR пак ще съответства на RRRR ).

Да, Oracle имплицитно използва TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) за да извършите преобразуването.

Ако използвате:

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

Тогава вашето вмъкване ще се провали.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Получава само време от To_Date() в заявка?

  2. Дизайн на база данни за планиране на лекар

  3. Как да създадете уникален индекс на полета с възможни нулеви стойности (Oracle 11g)?

  4. Oracle Entity Framework - Генерирайте обект от таблици в различна схема

  5. Използването на distinct в колона и изпълнението на order by в друга колона дава грешка