Функция даты Oracle - PullRequest
       23

Функция даты Oracle

0 голосов
/ 27 октября 2009

Я выполняю приведенный ниже запрос. Он возвращает мне пустую строку. Однако, если в таблице есть записи, имеющие upd_time = '12 -MAR-08 '. Я не понимаю, почему он не возвращает дату '12 - MAR-08'.Пожалуйста, помогите мне ??

SELECT br_data.upd_time FROM BANKREC.br_data где br_data.upd_time = '12 -MAR-08 ';

Ответы [ 4 ]

2 голосов
/ 27 октября 2009

Вероятно, что upd_time не совсем 12 марта 2008 года. Формат даты не показывает компонент времени, но, вероятно, он есть (тип данных DATE в Oracle может содержать компоненты как даты, так и времени).

Попробуйте это (это позволит вам увидеть компоненты времени):

alter session set nls_date_format='DD-MON-YY HH24:MI:SS';

SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');
1 голос
/ 27 октября 2009

Вы должны использовать функцию Oracle для правильного преобразования вашей строки в дату, используя

to_date('12-MAR-08', 'DD-MMM-YY')

Тогда вы должны принять во внимание, что тип данных Oracle «Дата» также содержит информацию о времени до ближайшей секунды. Это означает, что дата, которая была построена на первом этапе, на самом деле - полночь 12 марта. Поэтому вы должны убедиться, что upd_time урезано до полуночи:

trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')

Ваш полный запрос становится

SELECT br_data.upd_time 
FROM BANKREC.br_data 
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');

Существуют и другие способы обрезать эту кошку (вы можете перенести столбец updTime в правильное поле char с помощью to_char(upd_time, 'DD-MMM-YY')), но обычно рекомендуется сделать данные, которые вы ищете, похожими на те, которые вы можете найти в базе данных, это увеличивает ваши шансы на использование индекса для поиска.

1 голос
/ 27 октября 2009

То же самое, если вы делаете

SELECT br_data.upd_time FROM BANKREC.br_data 
       where trunc(br_data.upd_time) = '12-MAR-08';

Возможно, что upd_time - это не дата, а временная метка, поэтому на самом деле она содержит, например, '12 -MAR-08 05:30', что не было бы тем же trunc() удаляет временную часть временной метки.

Так как он не возвращает ошибку, я предполагаю, что он правильно анализирует дату, но в противном случае вы можете попробовать с to_date('12-MAR-08','DD-MON-YY')

0 голосов
/ 27 октября 2009

В данный момент у меня нет доступа к oracle db, но я помню, что использовал to_char.

попробовать

SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';
...