比较来自不同表的两个时间戳

时间:2013-10-24 12:29:31

标签: sql oracle oracle11g

我想与来自不同表格的时间戳进行比较。我希望获得tbl_1中的图章大于tbl_2中MAX(图章)的所有行。

select *
from tbl_1
where timestamp > (select MAX(TIMESTAMP) from tbl_2);
不幸的是,这不起作用。我总是得到零结果:/。列的数据类型是日期/时间


好的,我发现了问题。

问题是如果tbl_2为空并且没有日期,则它不会返回任何内容。当我输入较小的日期时它会起作用。

2 个答案:

答案 0 :(得分:1)

我发现做手动比较有帮助。运行查询

select MAX(TIMESTAMP) from tbl_2

并查看其中的日期是否大于您在tbl_1

中的任何日期
select MAX(TIMESTAMP) from tbl_1

如果是这样,那就解释了为什么你没有得到结果,你将不得不查看那些大的时间戳来确定记录是否需要更改。

要使其工作以返回所有行,即使在tbl_2中为MAX(TIMESTAMP)查询返回NULL

select *
from tbl_1
where timestamp > (select MAX(TIMESTAMP) from tbl_2) or (select MAX(TIMESTAMP) from tbl_2) is null;

答案 1 :(得分:1)

回答作者的回答......

您可以使用NVL来考虑子查询返回NULL的可能性(当tbl_2为空时):

select *
  from tbl_1
where timestamp > NVL((select MAX(TIMESTAMP) from tbl_2), timestamp - 1);