我在写一个查询来确定某人是否未成年。
select
case when
((select trunc((sysdate - to_date(customer.birthday)) / 365, 0) from dual) > 18) then 'N' -- If the age is greater than 18, not a minor
else 'Y'
end as minor,
-- other columns.....
from database.customer cusomter
上面的查询给了我大约100个结果。但是,当我像下面这样从查询中排除该子句时,它会给我大约1000个结果。
select
customer.birthday,
-- other columns.....
from database.customer
我试着在oracle中查找decode和case by之间的区别,我猜这与oracle处理null值的方式有关,但我真的不能把我的手指放在上面。任何帮助将不胜感激。谢谢大家!
1条答案
按热度按时间ymdaylpp1#
你有错误:
cusomter
别名拼写错误。DUAL
表(这不是错误的,只是不必要)。上面的查询给了我大约100个结果。但是,当我像下面这样从查询中排除该子句时,它会给我大约1000个结果。
在
SELECT
子句中是否包含某些内容不会影响返回的行数;在上面的查询中删除CASE
表达式不可能给您带来额外的结果。如果你想改变返回的行数,那么你需要使用
WHERE
过滤器或JOIN
过滤器。