Oracle Интервал 1 день - PullRequest
       15

Oracle Интервал 1 день

0 голосов
/ 17 октября 2019

Я хотел бы понять разницу между

someDate >= (CURRENT_TIMESTAMP - INTERVAL '1' DAY) 

и

someDate >= (CURRENT_TIMESTAMP - 1)

Потому что для меня это выглядит так же, но 2-й, кажется, лучше перф.

1 Ответ

2 голосов
/ 17 октября 2019

Основное отличие состоит в том, что CURRENT_TIMESTAMP - 1 зависит от способности Oracle выполнять арифметику с типом данных DATE и получать новую дату, что является возможностью (некоторые), которую другие базы данных не поддерживают.

Принимая во внимание, что CURRENT_TIMESTAMP - INTERVAL '1' DAY использует интервальный тип данных для достижения того же конца. Это стандартный синтаксис и широко поддерживается.

Я бы ожидал, что любое воспринимаемое преимущество в производительности по сравнению с другим будет иллюзией, возможно, вызванным эффектом «теплого кэша».

Существуетвторичная разница. Использование арифметики во втором случае приводит к неявному преобразованию данных, а производное значение представляет собой DATE, тогда как использование INTERVAL означает, что производное значение первого примера остается TIMESTAMP.

select dump(current_date) as dt
       ,dump(current_timestamp) as ts 
       ,dump(current_timestamp-1) as ts_arith
       ,dump(current_timestamp - interval '1' day) as ts_invl
       ,dump(current_date - interval '1' day) as dt_invl
from dual
/

Это может привести кпривести к разнице в производительности, если SOME_DATE является типом даты и столбец проиндексирован. В этом случае сравнение с датой может использовать индекс, тогда как сравнение с отметкой времени - нет.

...