sql >> Databáze >  >> RDS >> Oracle

Při použití add_months není platný měsíc v oracle

Nikdy, nikdy nepoužívejte TO_DATE() na něco, co je již DATE . Důvodem je to, že Oracle bude muset provést některé implicitní konverze, aby splnil vaše přání:

TO_DATE(sysdate, 'mm-yyyy')

je skutečně spuštěn jako

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

takže pokud je váš nls_date_format nastaven na něco jiného než 'mm-yyyy', budete mít problémy. Výchozí parametr nls_date_format je 'DD-MON-YY', což je více než pravděpodobná hodnota, na kterou je nastavena vaše.

Pokud vše, co jste chtěli udělat, bylo přidat_měsíce k 1. dni aktuálního měsíce, měli byste použít TRUNC() , např.:

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

Zde je důkaz implicitního to_char, pokud to_date něco, co je již datem, jak požaduje Lalit - plán provádění základního dotazu zahrnujícího 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]!)

Můžete jasně vidět TO_CHAR() ve stavu filtru.



  1. připojit AngularJS k mysql pomocí mé služby PHP?

  2. Povolení Laravel odepřeno na vzdáleném serveru Mysql (AWS aurora)

  3. Databáze Python a MySQL:Praktický úvod

  4. Jak vytvářet a používat pohledy MySQL