Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
Oracle SQL CASE语句检查多个条件_Sql_Oracle - Fatal编程技术网

Oracle SQL CASE语句检查多个条件

Oracle SQL CASE语句检查多个条件,sql,oracle,Sql,Oracle,我正在使用Oracle SQL并尝试实现以下逻辑: 对于PS_员工,如果ADDRESS3不为null且不等于“”,则使用ADDRESS2填充此字段,否则使用ADDRESS1填充此字段 我可以让下面的部分正常工作,但如何确保它也不为空 , ADDRESS_LINE1 = SELECT (CASE WHEN t2.ADDRESS3 != ' ' THEN substr(t2.ADDRESS2, 1, 30) ELSE substr(t2.ADDRESS1, 1, 30) END)

我正在使用Oracle SQL并尝试实现以下逻辑: 对于PS_员工,如果ADDRESS3不为null且不等于“”,则使用ADDRESS2填充此字段,否则使用ADDRESS1填充此字段

我可以让下面的部分正常工作,但如何确保它也不为空

, ADDRESS_LINE1 = 
    SELECT (CASE WHEN t2.ADDRESS3 != ' ' THEN substr(t2.ADDRESS2, 1, 30) ELSE substr(t2.ADDRESS1, 1, 30) END)
    FROM PS_EMPLOYEES t2
    WHERE t2.EMPLID = PS_Z_EXS_EMP_TBL_T.EMPLID

您可以使用
案例
语句中组合您喜欢的任何条件

(CASE WHEN t2.address3 IS NOT NULL AND
           t2.address3 != ' '
      THEN substr( t2.address2, 1, 30 )
      ELSE substr( t2.address1, 1, 30 )
  END)

我认为你应该可以在你的案例条款中加入一个or语句

SELECT (CASE WHEN t2.ADDRESS3 != ' ' or t2.ADDRESS3 is null THEN substr(t2.ADDRESS2, 1, 30) ELSE substr(t2.ADDRESS1, 1, 30) END)

我不懂逻辑。为什么要评估第3行并返回第1行的第2行或第1行。这意味着,如果地址的第3行为空,则返回第1行地址的第2行。否则,如果地址3为空,则返回第1行的第1行。也许你有一些奇怪的业务规则。在Oracle中,空集和null的计算结果是相同的,因此你可以将trim(t2.address3)设置为notnull(trim去掉空格),因为空集和null被视为相同的,所以只需检查null。你不需要做任何事情<代码>=NULL,并且
NULL
被视为false,则code>将返回
NULL