Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果(条件,那么,else)在Oracle中_Sql_Oracle_Plsql_Conditional Operator - Fatal编程技术网

Sql 如果(条件,那么,else)在Oracle中

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

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中是否有类似的工具?

您想使用,或者


是的,应该这样做。

您需要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