Приведение даты зависит от параметров сеанса NLS, и в настоящее время они не соответствуют формату строки, которую вы предоставляете.В качестве демонстрации:
alter session set nls_date_format = 'DD-MON-RR';
select CAST ('3-JUN-18 00:00:00' AS DATE) from dual;
ORA-01830: date format picture ends before converting entire input string
alter session set nls_date_format = 'DD-MON-RR HH24:MI:SS';
select CAST ('3-JUN-18 00:00:00' AS DATE) from dual;
CAST('3-JUN-1800:0
------------------
03-JUN-18 00:00:00
Лучше полностью избежать этой проблемы, используя функцию to_date()
, которая позволяет указать формат строки:
AND GFT.CREATED_ON > TO_DATE('3-JUN-18 00:00:00', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE=ENGLISH')
AND GFT.CREATED_ON <= TO_DATE('5-JUN-18 23:59:59', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE=ENGLISH');
Я включилнеобязательный третий аргумент для указания языка даты, потому что вы используете названия месяцев.Если вы можете, измените формат строки, чтобы использовать номера месяцев и 4-значные годы:
AND GFT.CREATED_ON > TO_DATE('03/06/2018 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
AND GFT.CREATED_ON <= TO_DATE('05/06/2018 23:59:59', 'DD/MM/YYYY HH24:MI:SS');
Также было бы лучше сделать ваш диапазон следующим образом:
AND GFT.CREATED_ON >= TO_DATE('03/06/2018 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
AND GFT.CREATED_ON < TO_DATE('06/06/2018 00:00:00', 'DD/MM/YYYY HH24:MI:SS');
, которыйвключает в себя все, начиная с ровно полуночи 3-го (что исключает ваша версия из-за >
, так что вы видите вещи только с 00:00:01) и до, но не включая, полуночи 6-го.
Это время не нужно указывать на самом деле, так как по умолчанию это полночь; вы можете упростить его до:
AND GFT.CREATED_ON >= TO_DATE('03/06/2018', 'DD/MM/YYYY')
AND GFT.CREATED_ON < TO_DATE('06/06/2018', 'DD/MM/YYYY');
, и его можно еще больше упростить с однозначными литералами даты:
AND GFT.CREATED_ON >= DATE '2018-06-03'
AND GFT.CREATED_ON < DATE '2018-06-06';
Кстати, вам действительно следует начать использовать современный синтаксис объединения, и обычно не рекомендуется использовать *
- лучше перечислить столбцы, которые вам действительно нужны из каждой таблицы.Для начала столбцы, используемые в условиях соединения, будут показаны дважды, по одному из каждой объединенной таблицы.