sql >> Database teknologi >  >> RDS >> Oracle

Ikke en gyldig måned i oracle, når add_months bruges

Brug aldrig, aldrig TO_DATE() på noget, der allerede er en DATE . Grunden til dette er, fordi Oracle bliver nødt til at foretage nogle implicitte konverteringer for at følge dine ønsker:

TO_DATE(sysdate, 'mm-yyyy')

køres virkelig som

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

så hvis dit nls_date_format er sat til noget andet end 'mm-yyyy', vil du få problemer. Standardparameteren nls_date_format er 'DD-MON-YY', hvilket er mere end sandsynligt, at værdien din er indstillet til.

Hvis alt hvad du ville gøre var at tilføje_måneder til den 1. i den aktuelle måned, så skal du bruge TRUNC() , f.eks.:

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

Her er et bevis på det implicitte to_char, hvis du to_date noget, der allerede er en dato, som anmodet af Lalit - en eksekveringsplan for en grundlæggende forespørgsel, der involverer 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 tydeligt se TO_CHAR() i filtertilstand.



  1. Hvorfor får jeg java.lang.AbstractMethodError, når jeg prøver at indlæse en blob i db'en?

  2. HTTP-fejl 500.22 - Intern serverfejl (Der er fundet en ASP.NET-indstilling, som ikke gælder i integreret administreret pipeline-tilstand.)

  3. mySQL - Skal jeg denormalisere?

  4. Hvordan man laver en databaseforbindelse i anvendelse af Apache Tomcat ved hjælp af Struts 2