首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL查询中的NULL处理增强

PL/SQL查询中的NULL处理增强
EN

Stack Overflow用户
提问于 2019-10-14 16:58:11
回答 2查看 63关注 0票数 0

当我们在WFD_DETECTION_EPA变量中传入一些值时,下面的查询不会列出在S1_WFD_OPERATION_CODE中包含null值的所有记录。只有WFD_DETECTION_EPA不是null的记录才会出现在结果中。

如何增强这个查询?

代码语言:javascript
复制
           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
                   || '%'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-14 17:08:21

您可以将条件与OR结合使用

代码语言:javascript
复制
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
                   || '%'

干杯!!

票数 2
EN

Stack Overflow用户

发布于 2019-10-14 18:47:11

你的逻辑比必要的复杂。尽管在缺省情况下,Oracle将空字符串和NULL视为相同的值,但字符串连接忽略NULL值。因此,您可以使用:

代码语言:javascript
复制
(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表达式是不必要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58373282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档