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