Oracle
 sql >> база данни >  >> RDS >> Oracle

ORACLE - ORA-01843:не е валиден месец

Гледайки реда:

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

След това '08/03/2015' и '08/03/2016' са низови литерали и не са дати.

Oracle ще опита неявно преобразуване от низов литерал към дата, използвайки вашия NLS_DATE_FORMAT параметър на сесията като маска за форматиране и ако това не работи, ще изведе грешка.

Простото решение е да не използвате низови литерали, а вместо това да използвате литерали за дата:

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

Но можете също да посочите маската за формат:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ръчно възможни PL/SQL недостатъчни привилегии в рамките на заявка

  2. Метод за събиране:Процедура DELETE в базата данни на Oracle

  3. Как NULL стойностите влияят на производителността при търсене в база данни?

  4. Вземете името на извикващата процедура или функция в Oracle PL/SQL

  5. Попълване на елемент от дърво с група записи във форми на Oracle