Почему предложение where сравнивает дату и время по-разному с предложением case-when? - PullRequest
0 голосов
/ 12 апреля 2019

Условие в предложении when, содержащем сравнение TIMESTAMP и его версии trunc (), по-видимому, оценивается иначе, чем когда оно находится в предложении where.

Я работаю в Oracle SQL разработчиков. У меня есть таблица, которая имеет атрибут timestamp (6). Мне сказали, что у атрибута timestamp измерение времени всегда пустое (00: 00: 00,000000). Я хотел это проверить и попал в интересную проблему. Когда я использую, где пункт

Select * from CUSTOMER_DATA 
where trunc(DAT_CUSTOMER_SINCE) <> DAT_CUSTOMER_SINCE

Я действительно получаю ноль строк.

Но когда я хочу увидеть атрибуты как усеченные, я использую предложение Case-when

CASE WHEN trunc(DAT_CUSTOMER_SINCE) = DAT_CUSTOMER_SINCE then
          trunc(DAT_CUSTOMER_SINCE) 
     else DAT_CUSTOMER_SINCE 
end 
from CUSTOMER_DATA

Я получаю вывод в виде отметки времени, т. Е. Как если бы условие было ложным.

Вот пример таблицы / данных:

   create table CUSTOMER_DATA(
DAT_CUSTOMER_SINCE TIMESTAMP(6),
Another_text VARCHAR2(50 CHAR)
)
--select * from customer_data;
Insert into customer_data values(TO_TIMESTAMP('2019-04-15 00:00:00,000000', 'YYYY-MM-DD HH24:MI:SS,FF6'),'Not important');
select
CASE WHEN trunc(DAT_CUSTOMER_SINCE) = DAT_CUSTOMER_SINCE then
          trunc(DAT_CUSTOMER_SINCE) 
     else DAT_CUSTOMER_SINCE 
end 
from CUSTOMER_DATA;
select trunc(DAT_CUSTOMER_SINCE) from customer_data
where DAT_CUSTOMER_SINCE=trunc(DAT_CUSTOMER_SINCE);

Мой вопрос: почему это сравнение работает в предложении where, но не работает в предложении Case-when?

...