比较Oracle中的两个时间戳

时间:2017-02-20 16:21:26

标签: sql oracle timestamp

如何在oracle SQL中比较这两个timestamp

  • 日期1 = 1420042143
  • 日期2 = 1412176143

SELECT * FROM my_table WHERE my_table.date BETWEEN Date1 AND Date2

1 个答案:

答案 0 :(得分:1)

假设这些是基于Unix类型的基于纪元的时间戳存储为数字,而不是真实的Oracle / SQL时间戳,您将以奇怪的方式进行格式化,您所展示的内容将起作用;除了你展示它的方式,价值观是错误的。 From the documentation

  

如果expr3< expr2,则间隔为空。

由于您使用的Date1值作为下限更高,您使用的Date2值作为上限,没有看到任何数据,即使任何行都有您的范围内的值,除非您将它们交换:

SELECT * FROM my_table WHERE my_table.date BETWEEN Date2 AND Date1

如果您在其他地方获得这些表格,并且不知道哪些会更高,那么您可以使用最少和最好的形式来解决这个问题:

SELECT * FROM my_table
WHERE my_table.date BETWEEN LEAST(Date1, Date2) AND GREATEST(Date1, Date2)

另请注意between包含在内。有一些样本数据:

CREATE TABLE my_table(epoch NUMBER);
INSERT INTO my_table(epoch) VALUES (1412176143);
INSERT INTO my_table(epoch) VALUES (1417584134);
INSERT INTO my_table(epoch) VALUES (1420042143);

相当于您的原始查询找不到数据:

SELECT * FROM my_table WHERE epoch BETWEEN 1420042143 AND 1412176143;

no rows selected

反转值会查找数据,包括上限和下限值本身:

SELECT * FROM my_table WHERE epoch BETWEEN 1412176143 AND 1420042143;

     EPOCH
----------
1412176143
1417584134
1420042143