Условие в предложении 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?