【发布时间】:2015-01-30 19:40:28
【问题描述】:
使用 oracle 11g
我读了另一个SO post,其中间隔“1”小时应该按照我期望的方式工作,所以我想知道为什么我会从这两个查询中得到不同的结果,也许有助于更好地理解间隔查询的工作原理。 ..
这两个查询的目的是获取它们在表中停留时间少于 1 小时的所有记录。
select err_ts from tbl where err_ts > systimestamp-(1/24) order by err_ts desc;
30-JAN-15 02.14.48.000000000 PM
30-JAN-15 02.08.58.000000000 PM
30-JAN-15 01.49.09.000000000 PM
select err_ts from tbl where (systimestamp - err_ts)
30-JAN-15 02.14.48.000000000 PM
30-JAN-15 02.08.58.000000000 PM
30-JAN-15 01.49.09.000000000 PM
30-JAN-15 01.28.40.000000000 PM
30-JAN-15 01.21.12.000000000 PM
30-JAN-15 01.17.06.000000000 PM
【问题讨论】:
-
这几乎可以肯定是一个时区问题,例如,jonathanlewis.wordpress.com/2013/04/16/systimestamp。在后一个查询中,您可能需要 localtimestamp 而不是 systimestamp(这可能取决于
err_ts的确切时间戳类型)。 -
出于兴趣,如果您改用
- interval '1' hour,第一个查询会返回什么?您正在隐式转换为日期类型以减去(1/24),这会丢失时区。 -
@JustinCave 似乎在我为第一个查询更改为 localtimestamp 时产生了修复。您应该作为答案发布,以便我接受。我很好奇,但我是否应该将第二个查询更改为也使用 localtimestamp?
标签: sql oracle timestamp intervals