如果两个值之一不为null,是否有Oracle函数返回布尔值?

时间:2019-01-31 07:19:12

标签: oracle isnull nvl

例如:n1和n2,想知道任何内置的oracle函数都可以实现吗?

样本条件和预期输出:

  1. 如果n1为null且n2为null,则返回null
  2. 如果n1为null且n2不为null,则返回n2
  3. 如果n1不为null并且n2为null,则返回n1
  4. 如果n1和n2不为null,则返回n1和n2的总和

3 个答案:

答案 0 :(得分:3)

检查:

case when n1 is not null and n2 is not null then
  n1 + n2
else
   COALESCE(n1,n2)
end

带有单个coalesce

 COALESCE(n1+n2,n1,n2)
create table t as 
 select 1 n1, 2 n2 from dual union all
 select null, 2 from dual union all
 select 1, null from dual union  all
 select null, null from dual
4 rows affected
select COALESCE(n1+n2,n1,n2) from t
| COALESCE(N1+N2,N1,N2) |
| --------------------: |
|                     3 |
|                     2 |
|                     1 |
|                  null |

db <>提琴here

答案 1 :(得分:2)

可以结合使用CASE表达式和coalesce():

case 
   when n1 is null and n2 is null then null
   else coalesce(n1, 0) + coalesce(n2, 0)
end as n1_n2_sum

答案 2 :(得分:2)

您可以尝试以下-

with data as (
  select 1 X, 2 Y, 1 sno from dual
  union
  select null X, 2 Y, 2 sno from dual
  union
  select 1 X, null Y, 3 sno from dual
  union
  select null X, null Y, 4 sno from dual
  )
  select sno, X, Y, coalesce(X+Y,X,Y) from data
  order by sno


+-----+--------+--------+-------------------+
| SNO |   X    |   Y    | COALESCE(X+Y,X,Y) |
+-----+--------+--------+-------------------+
|   1 | 1      | 2      | 3                 |
|   2 | (null) | 2      | 2                 |
|   3 | 1      | (null) | 1                 |
|   4 | (null) | (null) | (null)            |
+-----+--------+--------+-------------------+