Предполагая, что ваш business_date
на самом деле является строкой в формате, который вы показали (и на самом деле это не дата, которую ваш клиент просто показывает в этом формате), вам также необходимо преобразовать ее в тип даты. как преобразование строковых литералов.
select *
from business_details
where to_date(business_date, 'DD-MON-RR HH24:MI:SS')
between to_date('12-JUN-18 21:15:13', 'DD-MON-RR HH24:MI:SS')
and to_date('25-JUN-18 18:15:32', 'DD-MON-RR HH24:MI:SS');
Модель формата, которую вы пытались использовать в комментарии, сделала следующее:
to_date('12-JUN-18 21:15:13', 'DD-MM-YYYY HH24:MI:SS')
использует MM
вместо MON
, который в любом случае работает по умолчанию - хотя использование номеров месяцев в любом случае безопаснее, поскольку они не зависят от языка сеанса. Но что более важно, он использует YYYY
. Если вы передадите двузначное значение, например 18, и попытаетесь конвертировать с YYYY
, вы получите неправильный год:
select to_date('12-JUN-18 21:15:13', 'DD-MON-YYYY HH24:MI:SS') form dual;
TO_DATE('12-JUN-182
-------------------
0018-06-12 21:15:13
В вашей версии ваш business_date
был преобразован неявно, поэтому будет использовать настройки NLS, которые, вероятно, уже используют RR
. Но это означает, что вы сравнивали дату в 2018 году с диапазоном в 0018, поэтому ничего не найдено.
Вы также можете использовать литералы меток времени для фиксированных значений (если эти строки фактически не передаются откуда-то еще):
select *
from business_details
where to_date(business_date, 'DD-MON-RR HH24:MI:SS')
between cast(timestamp '2018-06-12 21:15:13' as date)
and cast(timestamp '2018-06-25 18:15:32' as date);