Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORACLE - ORA-01843:kein gültiger Monat

Blick auf die Zeile:

OD.DATE2 BETWEEN '08/03/2015' AND '08/03/2016'

Dann '08/03/2015' und '08/03/2016' sind Zeichenfolgenliterale und keine Datumsangaben.

Oracle versucht eine implizite Konvertierung von einem Zeichenfolgenliteral in ein Datum unter Verwendung Ihres NLS_DATE_FORMAT Sitzungsparameter als Formatmaske und wenn dies nicht funktioniert, wird ein Fehler ausgegeben.

Die einfache Lösung besteht darin, keine Zeichenfolgenliterale zu verwenden, sondern stattdessen Datumsliterale:

SELECT 'M'||to_char( DATE2, 'MM' ) PERIODE,
        count(*) DATA,
        DCCPT
FROM    BDD
WHERE   BDD   = 'phone'
AND     SENS  = 'Ent'
AND     DCCPT IN ( 'PIOLUC' )
AND     DATE2 BETWEEN DATE '2015-03-08' AND DATE '2016-03-08'
GROUP BY
        'M'||to_char( DATE2, 'MM' ),
        DCCPT

Sie könnten aber auch die Formatmaske angeben:

OD.DATE2 BETWEEN TO_DATE( '08/03/2015', 'DD/MM/YYYY' ) AND TO_DATE( '08/03/2016', 'DD/MM/YYYY' )