sql >> Databasteknik >  >> RDS >> Oracle

Inte en giltig månad i oracle när add_months används

Använd aldrig, aldrig TO_DATE() på något som redan är ett DATE . Anledningen till detta är att Oracle kommer att behöva göra några implicita konverteringar för att följa dina önskemål:

TO_DATE(sysdate, 'mm-yyyy')

körs verkligen som

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

så om ditt nls_date_format är inställt på något annat än "mm-åååå", kommer du att få problem. Standardparametern nls_date_format är 'DD-MON-YY', vilket mer än troligt är värdet som ditt är inställt på.

Om allt du ville göra var att lägga till_månader till den 1:a i innevarande månad, bör du använda TRUNC() , t.ex.:

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

Här är bevis på implicit to_char om du to_date något som redan är ett datum, som begärts av Lalit - en exekveringsplan för en grundläggande fråga som involverar 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]!)

Du kan tydligt se TO_CHAR() i filtertillståndet.



  1. Du kan nu använda Access med Microsoft Azure MFA!

  2. SQL Server 2008- Få tabellbegränsningar

  3. MySQL:s olika citattecken

  4. Hur man korrekt hanterar datum i frågebegränsningar