Oracle sql to_date on timestamp + interval。什么是最优的

时间:2016-11-21 15:19:45

标签: sql oracle syntax timestamp

我很好奇什么是包含比较语句的oracle SQL查询的最佳/有效语法:

WHERE time_stamp + INTERVAL '+1' HOUR
        BETWEEN to_date('13-08-2016 17:02', 'dd-mm-yyyy hh24:mi:ss')
            AND to_date('21-11-2016 16:02', 'dd-mm-yyyy hh24:mi:ss')

WHERE time_stamp
        BETWEEN to_date('13-08-2016 17:02', 'dd-mm-yyyy hh24:mi:ss') - INTERVAL '+1' HOUR
            AND to_date('21-11-2016 16:02', 'dd-mm-yyyy hh24:mi:ss') - INTERVAL '+1' HOUR

sql解析器会执行优化工作吗?

2 个答案:

答案 0 :(得分:2)

我建议将这些写成:

WHERE time_stamp BETWEEN TIMESTAMP '2016-08-13 17:02:00' - INTERVAL '1' HOUR AND 
                         TIMESTAMP '2016-11-21 16:02:00' - INTERVAL '1' HOUR

使用DATETIMESTAMP用于ISO格式的常量只会使代码更清晰(在我看来)。

此外,在“常量”上使用日期算术可以使优化器更容易使用索引(如果有合适的索引)。

答案 1 :(得分:0)

取决于您是否在该time_stamp列上有索引。 如果您有索引,最好不要在该列上执行任何表达式或函数。 因此,如果列具有索引,则第二个查询将执行得更好。