case语句仅适用于非null的列

时间:2013-09-26 20:09:01

标签: sql db2 case where

我正在编写一个查询,根据他们的出生日期和当前日期搜索18岁以上的人。在某些情况下,某人在数据库中没有出生日期。对于这些人,我只想将它们包含在我的查询中,而不是对它们执行where子句。这可能吗?这是一个db2数据库

 select *
   from people i
where case when coalesce(i.birth_date,'') != '' then (i.birth_date < (SELECT CURRENT_DATE - 18 years from datetoday)) else '' end

以上查询是我尝试但是抛出错误我不确定它是否是正确的格式。或者,如果我想做的事情是可能的。

2 个答案:

答案 0 :(得分:0)

而不是CASE只使用OR

select *
from people i
where (coalesce(i.birth_date) != '' AND (i.birth_date < (SELECT CURRENT_DATE - 18 years from datetoday)))
  OR  coalesce(i.birth_date) = ''

您无法返回带有CASE语句的表达式。

答案 1 :(得分:0)

试试这个:

select *
from people i
where i.birth_date IS NULL OR i.birth_date < (SELECT CURRENT_DATE - 18 years from datetoday)

您可以检查birth_date是否为空或是否超过18。