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

Hasil konversi tanggal SQL ke parameter model format angka tidak valid.

Akar Penyebab:

Anda mengonversi NUMBER ke STRING , dengan asumsi tanggal TANGGAL . 20111010 bukan DATE, itu NUMBER. Juga, '20111010' bukan DATE, itu STRING. Mereka benar-benar berbeda.

  • 20111010 - NUMBER
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - TANGGAL

Kesalahan:

SQL> SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual;
SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual
                         *
ERROR at line 1:
ORA-01481: invalid number format model

Datang ke kueri Anda:

WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
  BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')

Anda tidak perlu memperumit konversi dan pemformatan.

TIMESTAMP tipe data adalah ekstensi pada TANGGAL tipe data. Selain elemen datetime dari tipe data DATE, tipe data TIMESTAMP menyimpan sepersekian detik hingga presisi antara 0 dan 9 tempat desimal, defaultnya adalah 6.

Karena Anda berurusan dengan TIMESTAMP Anda dapat menggunakan TO_TIMESTAMP .

Saat melakukan aritmatika DATE/TIMESTAMP , Anda harus membiarkan tipe data apa adanya dan tidak mengubahnya menjadi string . Anda perlu menggunakanTO_CHAR hanya untuk tampilan .

Ubah predikat filter Anda sebagai:

WHERE CREATE_TIME 
BETWEEN TO_TIMESTAMP(:fromDate, 'YYYY/MM/DD') 
AND TO_TIMESTAMP(:toDate, 'YYYY/MM/DD')

Di atas, :fromDate dan :toDate harus berupa string dan bukan angka .

Misalnya,

SQL> SELECT to_timestamp('20111010', 'YYYYMMDD') FROM dual;

TO_TIMESTAMP('20111010','YYYYMMDD')
-----------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM

Atau, gunakan TO_CHAR untuk mengkonversi first pertama angka menjadi string :

SQL> SELECT to_timestamp(TO_CHAR(20111010), 'YYYYMMDD') FROM dual;

TO_TIMESTAMP(TO_CHAR(20111010),'YYYYMMDD')
------------------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memperbarui kolom dengan gabungan dua kolom lain dalam tabel yang sama

  2. Cara Mendaftar Semua Tabel di Oracle

  3. Hal-hal yang harus Anda ketahui tentang Tabel FND_LOBS di Aplikasi Oracle

  4. Ekspresi tabel Oracle tentang pengumpulan dan pemesanan

  5. Nilai yang dipisahkan koma ke fungsi IN di Oracle