Oracle, поиск данных между двумя разными датами - PullRequest
0 голосов
/ 28 июня 2018

У меня есть имя таблицы как business_details и имя столбца business_date с типом данных varchar2.

Теперь мне нужно выяснить данные между двумя разными датами и форматом даты, например: 12-ИЮНЬ-18 21: 15: 13

Средство, 12 июня 2018 г.

Пожалуйста, помогите мне написать запрос, который может получить данные между этими двумя датами: 12 июня 18 21:15:13 и 25 июня 18: 15: 32

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Предполагая, что ваш 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);
0 голосов
/ 28 июня 2018

Я предполагаю, что в таблице business_details у вас есть столбец date или что-то в этом роде.

Чем использовать что-то вроде этого:

select business_date from business_details
where date between TO_DATE ('12-JUN-18 21:15:13','dd-MM-yy hh:mi:ss') 
               AND TO_DATE ('25-JUN-18 18:15:32','dd-MM-yy hh:mi:ss');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...