sql >> Databasteknik >  >> RDS >> Oracle

ORACLE - ORA-01843:inte en giltig månad

Tittar på raden:

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

Sedan '08/03/2015' och '08/03/2016' är bokstavliga strängar och är inte datum.

Oracle kommer att försöka en implicit konvertering från en bokstavlig sträng till ett datum med din NLS_DATE_FORMAT sessionsparameter som formatmask och om detta inte fungerar kommer det att ge ett fel.

Den enkla lösningen är att inte använda strängliterals utan använd datumliterals istället:

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 också ange formatmasken:

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


  1. Hur kontrollerar man ett saknat nummer från en serie nummer?

  2. JSON_TYPE() – Få en JSON-värdestyp i MySQL

  3. Hur man konverterar en sträng till ett datum/tid i SQL Server med CAST()

  4. Hur får man överordnad tabell, referenstabell, namn på främmande nyckelbegränsningar och kolumner i SQL Server - SQL Server / TSQL självstudie del 71