Существует ли функция Oracle для возврата логического значения, если любое из двух значений не равно нулю? - PullRequest
0 голосов
/ 31 января 2019

например: n1 и n2, интересно, может ли какой-нибудь встроенный оракул добиться этого?

Условие выборки и ожидаемый результат:

  1. , если n1 равно нулю, а n2 равно нулю, вернуть ноль
  2. , если n1 равно нулю, а n2 не равно нулю, вернуть n2
  3. , если n1 не равно нулю, а n2 равно нулю, вернуть n1
  4. , если n1 и n2 не равно нулю, вернуть сумму n1 и n2

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Проверьте это:

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 |
|                  <em>null</em> |

дБ <> скрипка здесь

0 голосов
/ 31 января 2019

Вы можете попробовать ниже -

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)            |
+-----+--------+--------+-------------------+
0 голосов
/ 31 января 2019

Это можно сделать, используя комбинацию выражения 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
...