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

ORACLE - ORA-01843:ikke en gyldig måned

Ser på linjen:

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

Derefter '08/03/2015' og '08/03/2016' er strenge bogstaver og er ikke datoer.

Oracle vil forsøge en implicit konvertering fra en streng bogstavelig til en dato ved hjælp af din NLS_DATE_FORMAT sessionsparameter som formatmasken, og hvis dette ikke virker, vil det give en fejl.

Den enkle løsning er ikke at bruge streng-literals, men bruge dato-literals i stedet:

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

Men du kan også angive formatmasken:

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


  1. Opret SQL Server-job automatisk

  2. Sqlite-database opdaterer en række Android

  3. Bedste tilgange til grupperet median

  4. 3 måder at formatere et tal som en procentdel i PostgreSQL