Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 甲骨文间隔1天_Sql_Oracle_Datetime_Timestamp_Intervals - Fatal编程技术网

Sql 甲骨文间隔1天

Sql 甲骨文间隔1天,sql,oracle,datetime,timestamp,intervals,Sql,Oracle,Datetime,Timestamp,Intervals,我想了解两者之间的区别 someDate >= (CURRENT_TIMESTAMP - INTERVAL '1' DAY) 及 因为对我来说似乎是一样的,但第二个似乎有更好的性能。主要区别在于当前的时间戳-1依赖于Oracle对日期数据类型执行算术并派生新日期的能力,这是(某些)其他数据库不支持的能力 而CURRENT\u TIMESTAMP-INTERVAL'1'DAY使用间隔数据类型来实现相同的目的。这是标准语法,得到广泛支持 我认为任何一种感知到的性能优势都是一种错觉,可能是由

我想了解两者之间的区别

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


因为对我来说似乎是一样的,但第二个似乎有更好的性能。

主要区别在于
当前的时间戳-1
依赖于Oracle对日期数据类型执行算术并派生新日期的能力,这是(某些)其他数据库不支持的能力

CURRENT\u TIMESTAMP-INTERVAL'1'DAY
使用间隔数据类型来实现相同的目的。这是标准语法,得到广泛支持

我认为任何一种感知到的性能优势都是一种错觉,可能是由“热缓存”效应造成的

还有一个次要的区别。在第二种情况下使用算术会导致隐式数据转换,派生值是日期,而使用INTERVAL意味着第一个示例的派生值仍然是时间戳

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
/

如果某个日期是日期类型且列被索引,则这可能会导致性能差异。在这种情况下,与日期进行比较可能会使用索引,而与时间戳进行比较则不会

主要区别在于
CURRENT_TIMESTAMP-1
依赖于Oracle对日期数据类型执行算术运算并派生新日期的能力,这是(某些)其他数据库不支持的能力

CURRENT\u TIMESTAMP-INTERVAL'1'DAY
使用间隔数据类型来实现相同的目的。这是标准语法,得到广泛支持

我认为任何一种感知到的性能优势都是一种错觉,可能是由“热缓存”效应造成的

还有一个次要的区别。在第二种情况下使用算术会导致隐式数据转换,派生值是日期,而使用INTERVAL意味着第一个示例的派生值仍然是时间戳

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
/

如果某个日期是日期类型且列被索引,则这可能会导致性能差异。在这种情况下,与日期进行比较可能会使用索引,而与时间戳进行比较则不会

在您的问题中添加详细信息,解释#2“似乎”如何具有更好的性能。我怀疑解析和准备单个值“1天前”所需的时间,以便在查询中使用它进行过滤,这将对整体查询性能产生任何明显的影响,除非这会导致不必要的数以百万计的类型铸造rows@CaiusJard:可能是因为#1返回一个
时间戳
值,而#2返回一个
日期
值。If
someDate
也是一个可能影响查询索引使用的日期。但只有查询的执行计划可以证明,在问题中添加详细信息,解释#2“似乎”如何具有更好的性能。我怀疑解析和准备单个值“1天前”所需的时间,以便在查询中使用它进行过滤,这将对整体查询性能产生任何明显的影响,除非这会导致不必要的数以百万计的类型铸造rows@CaiusJard:可能是因为#1返回一个
时间戳
值,而#2返回一个
日期
值。If
someDate
也是一个可能影响查询索引使用的日期。但只有查询的执行计划才能证明这一点