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