Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tidak dapat memahami bagaimana nilai dikonversi ke format tanggal secara implisit

Aturan Konversi String-to-Date izinkan aturan pemformatan tambahan (tanpa pengubah lain yang diterapkan). Jadi:

  • MM juga cocok dengan MON dan MONTH;
  • MON cocok dengan MONTH (dan sebaliknya);
  • RR cocok dengan RRRR; dan
  • Tanda baca bersifat opsional.

Jadi:

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;

Semua menghasilkan tanggal 2016-08-10T00:00:00 .

Anda dapat mencegahnya dengan menggunakan FX model format

Kemudian:

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

Memberikan:ORA-01858: a non-numeric character was found where a numeric was expected dan hanya akan cocok di mana kecocokan pola yang tepat ditemukan (walaupun RR akan tetap cocok dengan RRRR ).

Ya, Oracle secara implisit menggunakan TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) untuk melakukan konversi.

Jika Anda menggunakan:

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

Maka penyisipan Anda akan gagal.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konektor Microsoft SSIS untuk Oracle oleh Attunity untuk VS2015 Tidak Ditampilkan

  2. Tampilkan nama departemen menggunakan kursor. Buat blok PL/SQL untuk menampilkan semua nama departemen dari tabel Departemen menggunakan kursor

  3. batas waktu transaksi tidak berfungsi saat hibernasi dengan Oracle

  4. Tabel Isi Rentang

  5. ORA-06530:Referensi ke komposit yang tidak diinisialisasi