Вопрос

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

ВЫБЕРИТЕ br_data.upd_time ИЗ BANKREC.br_data где br_data.upd_time = '12-МАР-08';

Это было полезно?

Решение

На данный момент у меня нет доступа к базе данных Oracle, но я помню, как использовал to_char.

пытаться

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

Другие советы

Вполне вероятно, что 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');

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

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 ')

Вы должны использовать функцию 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') ), но обычно рекомендуется сделать данные, которые вы ищете, похожи на те, которые вы можете найти в базе данных, поскольку это увеличивает ваши шансы на использование индекса для поиска.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top