sql >> Database >  >> RDS >> Oracle

ORACLE - ORA-01843:geen geldige maand

Kijkend naar de lijn:

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

Dan '08/03/2015' en '08/03/2016' zijn letterlijke tekenreeksen en zijn geen datums.

Oracle zal een impliciete conversie proberen van een letterlijke tekenreeks naar een datum met behulp van uw NLS_DATE_FORMAT sessieparameter als het formaatmasker en als dit niet werkt, wordt er een fout gegenereerd.

De eenvoudige oplossing is om geen letterlijke tekenreeksen te gebruiken, maar in plaats daarvan letterlijke datums:

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

Maar u kunt ook het formaatmasker specificeren:

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


  1. Oracle SQL:een tabel bijwerken met gegevens uit een andere tabel

  2. Er is een verbinding tot stand gebracht met de server, maar er is een fout opgetreden tijdens de pre-login-handshake

  3. 7 manieren om alle tabellen te retourneren met een primaire sleutel in SQL Server

  4. CAST(DATETIME AS DATE) over WHERE-component