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

Bukan bulan yang valid di Oracle saat add_months digunakan

Jangan pernah gunakan TO_DATE() pada sesuatu yang sudah menjadi DATE . Alasannya adalah karena Oracle harus melakukan beberapa konversi implisit untuk mengikuti keinginan Anda:

TO_DATE(sysdate, 'mm-yyyy')

benar-benar dijalankan sebagai

TO_DATE(TO_CHAR(sysdate, '<default nls_date_format parameter>'), 'mm-yyyy')

jadi jika nls_date_format Anda disetel ke sesuatu selain 'mm-yyyy', Anda akan mengalami masalah. Parameter nls_date_format default adalah 'DD-MON-YY', yang kemungkinan besar adalah nilai yang Anda atur.

Jika semua yang ingin Anda lakukan adalah menambahkan_bulan ke tanggal 1 bulan ini, maka Anda harus menggunakan TRUNC() , misalnya:

add_months(trunc(sysdate, 'MM'),-12)

Berikut bukti dari to_char implisit jika Anda memberi tanggal pada sesuatu yang sudah menjadi tanggal, seperti yang diminta oleh Lalit - rencana eksekusi kueri dasar yang melibatkan to_date(sysdate):

SQL_ID  3vs3gzyx2gtcn, child number 0
-------------------------------------
select *  from   dual where  to_date(sysdate) < sysdate

Plan hash value: 3752461848

----------------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |        |       |     2 (100)|          |
|*  1 |  FILTER            |      |        |       |            |          |
|   2 |   TABLE ACCESS FULL| DUAL |      1 |     2 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_DATE(TO_CHAR([email protected]!))<[email protected]!)

Anda dapat dengan jelas melihat TO_CHAR() dalam kondisi filter.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. perulangan melalui array untuk kondisi where pl/sql

  2. Oracle:Bagaimana saya bisa menentukan literal karakter dalam konversi TO_DATE?

  3. Parameter tanggal PL/SQL dinamis dengan nilai waktu dipertahankan

  4. Bagaimana saya bisa menampilkan tabledata dengan Java Stored Procedure?

  5. SQL Group By - menghitung catatan per bulan/tahun, kesalahan saat memasukkan - BUKAN BULAN VALID