如何在oracle SQL中比较这两个timestamp
SELECT * FROM my_table WHERE my_table.date BETWEEN Date1 AND Date2
答案 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