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

ORACLE - ORA-01843:neplatný měsíc

Při pohledu na řádek:

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

Poté '08/03/2015' a '08/03/2016' jsou řetězcové literály a nejsou to data.

Oracle se pokusí o implicitní převod z řetězcového literálu na datum pomocí vašeho NLS_DATE_FORMAT parametr session jako masku formátu a pokud to nefunguje, vyvolá chybu.

Jednoduchým řešením je nepoužívat řetězcové literály, ale místo toho použít datové literály:

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

Ale můžete také zadat masku formátu:

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


  1. Sekvence provádění klauzule Seskupit podle, Mít a Kde v SQL Server?

  2. Jak zjistit, zda je vypočítaný sloupec deterministický na serveru SQL Server

  3. Kurz Microsoft Access 2010, 2013, 2016 a 2019

  4. Jak zkontrolovat nastavení ANSI_NULLS relace na serveru SQL Server