Oracle SQL CASE语句检查多个条件
我正在使用Oracle SQL并尝试实现以下逻辑: 对于PS_员工,如果ADDRESS3不为null且不等于“”,则使用ADDRESS2填充此字段,否则使用ADDRESS1填充此字段 我可以让下面的部分正常工作,但如何确保它也不为空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)
, 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
。