当我们在WFD_DETECTION_EPA变量中传入一些值时,下面的查询不会列出在S1_WFD_OPERATION_CODE中包含null值的所有记录。只有WFD_DETECTION_EPA不是null的记录才会出现在结果中。
如何增强这个查询?
AND UPPER (FD.WFD_DETECTION_EPA) LIKE
'%'
|| CASE
WHEN LENGTH (S0_WFD_DETECTION_EPA) > 0
THEN
UPPER (S0_WFD_DETECTION_EPA)
ELSE
'%'
END
|| '%'
AND UPPER (FD.WFD_OPERATION_CODE) LIKE
'%'
|| CASE
WHEN LENGTH (S1_WFD_OPERATION_CODE) > 0
THEN
UPPER (S1_WFD_OPERATION_CODE)
ELSE
'%'
END
|| '%'发布于 2019-10-14 17:08:21
您可以将条件与OR结合使用
AND (UPPER (FD.WFD_DETECTION_EPA) LIKE
'%'
|| CASE
WHEN LENGTH (S0_WFD_DETECTION_EPA) > 0
THEN
UPPER (S0_WFD_DETECTION_EPA)
ELSE
'%'
END
|| '%' OR FD.WFD_DETECTION_EPA IS NULL) -- this
AND UPPER (FD.WFD_OPERATION_CODE) LIKE
'%'
|| CASE
WHEN LENGTH (S1_WFD_OPERATION_CODE) > 0
THEN
UPPER (S1_WFD_OPERATION_CODE)
ELSE
'%'
END
|| '%'干杯!!
发布于 2019-10-14 18:47:11
你的逻辑比必要的复杂。尽管在缺省情况下,Oracle将空字符串和NULL视为相同的值,但字符串连接忽略NULL值。因此,您可以使用:
(UPPER(FD.WFD_DETECTION_EPA) LIKE '%' || UPPER(S0_WFD_DETECTION_EPA) || '%' OR
FD.WFD_DETECTION_EPA IS NULL
) AND
(UPPER(FD.WFD_OPERATION_CODE) LIKE '%' || UPPER(S1_WFD_OPERATION_CODE) || '%'
)也就是说,CASE表达式是不必要的。
https://stackoverflow.com/questions/58373282
复制相似问题