2014-02-06 4 views
1

У меня есть таблица с датами, в ней есть что-то очень странное.Oracle Дата сравнения по дате

Когда я запрос к таблице

select distinct process_dt from table; 

Выход: 11/16/2013

Когда я запрос к таблице

select process_dt from table 
where process_dt=to_date('20131116', 'YYYYMMDD'); 

Выход 0 записи.

Когда я запрос к таблице

select process_dt from table 
where process_dt=trunc(process_dt); 

выход дает 100 строк, все говорят 11/16/2013.

Я не понимаю, почему мой второй запрос не работает. Есть идеи? должен ли я изменить сеанс определенным образом?

+1

Как определяется столбец? – steve

+0

Тип данных столбца - дата. – user2040673

+0

Возможно ли, что опечатка в вашем втором выражении выбора вызывает это? Вы набрали 'selct' – cha

ответ

-2

Вместо Сравнивая Свидание с другой DATE ...

Сравнить DateAsString с DateAsString ...

SELECT * FROM TABLE WHERE TO_CHAR (process_dt, 'мм/дд/гггг') = ' 11/16/2013' ;

НИЖЕ ВОПРОСНИКА ВОПРОСОВ 0 ROWS: am преобразование sysdate> строка> дата и сравнение !! ВЫБРАТЬ TO_CHAR (SYSDATE, 'YYYYMMDD') из двойного где SYSDATE = TO_DATE (TO_CHAR (SYSDATE, 'YYYYMMDD'), 'ГГГГММДД')

+0

Не очень хорошая идея. Оставайтесь с датами, поскольку это предотвращает использование индексов и не работает ни на что иное, кроме условий равенства. –

+0

хорошо, ничего из этого не сработало. idk почему. процесс в цепочке, которая заталкивает разделы. Это может вызвать эту проблему. Я буду копаться в коде. – user2040673

2

Проблемы с текущей проверкой является то, что тип данных Даты также содержит время. Для выполнения этой работы вам необходимо использовать trunc для столбца даты.

+0

SELECT TO_CHAR (SYSDATE, 'YYYYMMDD') из dual, где trunc (SYSDATE) = trunc (TO_DATE (TO_CHAR (SYSDATE, 'YYYYMMDD'), 'YYYYMMDD')) - WOrks !! –

+1

Наличие набора времени объясняет запрос 2, но не запрос 1 (если все они не имеют одинаковое время, что возможно) или запрос 3, который уже использует 'trunc'. Если у всех дат есть время, 'process_date = trunc (process_date)' всегда будет false, и вы не получите никаких строк назад. Если у кого-то не было времени, то запрос 2 найдет их. –

Смежные вопросы