Nhìn vào dòng:
OD.DATE2 BETWEEN '08/03/2015' AND '08/03/2016'
Sau đó '08/03/2015'
và '08/03/2016'
là các ký tự chuỗi và không phải là ngày tháng.
Oracle sẽ cố gắng chuyển đổi ngầm định từ một chuỗi ký tự thành một ngày bằng cách sử dụng NLS_DATE_FORMAT
của bạn tham số phiên làm mặt nạ định dạng và nếu điều này không hoạt động, nó sẽ gây ra lỗi.
Giải pháp đơn giản là không sử dụng các ký tự chuỗi mà thay vào đó sử dụng các ký tự ngày:
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
Nhưng bạn cũng có thể chỉ định mặt nạ định dạng:
OD.DATE2 BETWEEN TO_DATE( '08/03/2015', 'DD/MM/YYYY' ) AND TO_DATE( '08/03/2016', 'DD/MM/YYYY' )