我有一个查询,我将一个表中的日期与另一个表中的最大日期进行比较。我遇到的问题是,当与之进行比较的日期为空时。因此,请使用以下查询:
select col1 from table1 where date > (select max(date) from table b);除了当子查询返回0行之外,查询可以正常工作。在0行的情况下,我希望它返回所有行。因此,换句话说,我希望日期与日期时间最小值进行比较。因此,在0行的情况下,我想要比较:
date > '01-01-1900'我尝试过使用case语句,但没有成功,但我觉得我错过了一些简单的东西。
任何帮助都将不胜感激
发布于 2017-08-15 01:28:21
您希望使用NVL函数来提供帮助。
(NVL(p_datefield, to_date('01/01/1901','MM/DD/YYYY'))所以对你来说:
select col1 from table1 where date > (select max(NVL(date, to_date('01/01/1901','MM/DD/YYYY')) from table b);想法是01/01/1901代表null。如果您不喜欢它,那么将日期更改为您可以掌握的代表您的null的日期。
更新#1..下面的一条评论表明COALESCE会更好地工作。It could...so下面是这个例子:
select col1 from table1 where date > (select coalesce(date, to_date('01/01/1901','MM/DD/YYYY')) from table b);现在你有选择了。好好享受吧。
发布于 2017-08-15 01:36:18
当子查询没有返回任何行时,您希望发生什么情况?日期与null的比较将导致主查询不返回任何内容-从技术上讲,这是正确的响应。如果您不想这样做,那么您需要使用NVL function将null替换为字符串值。
https://stackoverflow.com/questions/45679781
复制相似问题