Sql 如果(条件,那么,else)在Oracle中
MySQL/MSSQL有一个简洁的内联if函数,您可以在查询中使用它来检测空值,如下所示Sql 如果(条件,那么,else)在Oracle中,sql,oracle,plsql,conditional-operator,Sql,Oracle,Plsql,Conditional Operator,MySQL/MSSQL有一个简洁的内联if函数,您可以在查询中使用它来检测空值,如下所示 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数据库上运行不安全,因为它似乎不支持这种内联if语法 Oracle中是否有类似的工具?您想使用,或者 是的,应该这样做。您需要n
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数据库上运行不安全,因为它似乎不支持这种内联if语法
Oracle中是否有类似的工具?您想使用,或者
是的,应该这样做。您需要nvl函数:nvl(foo.bar,0)
Oracle也支持各种ifs和案例。使用标准合并功能:
SELECT COALESCE(foo.bar, 0) as "bar", ...
或者使用Oracle自己的NVL函数来实现同样的功能。只需执行NVL(foo.bar,0)
,您就不必执行此操作
(select nvl(foo.bar,0)...
为了补充此处主要涉及空值和COALESCE/NVL/NVL2的其余答案:
SELECT *
FROM TheTable
WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END
很明显,案例陈述没有那么简洁,但它们倾向于灵活性。当您的条件不是基于空值时,这尤其有用 这看起来更像是我要找的。谢谢
SELECT *
FROM TheTable
WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END