MySQL / MSSQL有一个简洁的内联函数,如果您可以在查询中使用函数来检测空值,如下所示。
SELECT
...
foo.a_field AS "a_field",
SELECT if(foo.bar is null, 0, foo.bar) AS "bar",
foo.a_field AS "a_field",
...
我现在遇到的问题是这个代码在Oracle数据库上运行是不安全的,因为它似乎不支持这种内联语法。
Oracle中是否存在等效内容?
答案 0 :(得分:15)
补充其余答案,主要处理NULL值和COALESCE / NVL / NVL2:
SELECT *
FROM TheTable
WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END
CASE声明显然并不简洁,但它们都是为了灵活性。当您的条件不基于NULL时,这尤其有用。
答案 1 :(得分:14)
使用标准COALESCE功能:
SELECT COALESCE(foo.bar, 0) as "bar", ...
或者使用Oracle自己的NVL功能。
答案 2 :(得分:12)
答案 3 :(得分:0)
是的,NVL应该可以解决问题。
答案 4 :(得分:0)
你想要nvl函数:nvl(foo.bar,0)
Oracle也支持各种ifs和case。
答案 5 :(得分:0)
只做nvl(foo.bar,0)
,你不必做
(select nvl(foo.bar,0)...