首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在where子句中使用NVL

如何在where子句中使用NVL
EN

Stack Overflow用户
提问于 2016-04-14 15:19:13
回答 3查看 21.8K关注 0票数 4

我有以下代码:

代码语言:javascript
复制
SELECT cr_ts, msg_id, info 
FROM messaging_log
WHERE UPPER(INFO) LIKE '%' || TRIM(UPPER(P_INFO)) || '%'
AND cr_ts >= NVL(P_DATE, SYSDATE-10)
AND msg_id = NVL(P_ID, msg_id)
ORDER BY cr_ts desc;

其中P_INFO、P_DATE和P_ID是参数。在正常情况下,每个参数都是空的。但是,where子句AND msg_id = NVL(P_ID, msg_ID)不会返回msg_id本身为NULL的行。我错过了什么?

当P_ID和msg_id为空时,如何返回所有条目?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-14 15:33:43

试试这个;)

代码语言:javascript
复制
SELECT
  cr_ts,
  msg_id,
  info
FROM messaging_log
WHERE UPPER(INFO) LIKE '%' || TRIM(UPPER(P_INFO)) || '%'
AND ((P_DATE IS NULL AND cr_ts >= (SYSDATE - 10)) OR cr_ts >= P_DATE)
AND (P_ID IS NULL OR msg_id = P_ID)
ORDER BY cr_ts DESC;
票数 1
EN

Stack Overflow用户

发布于 2016-04-14 15:27:53

代码语言:javascript
复制
SELECT cr_ts, msg_id, info 
FROM messaging_log
WHERE UPPER(INFO) LIKE '%' || TRIM(UPPER(P_INFO)) || '%'
AND cr_ts >= NVL(P_DATE, SYSDATE-10)
AND NVL(msg_id,'*') = NVL(P_ID, '*')
ORDER BY cr_ts desc;
票数 0
EN

Stack Overflow用户

发布于 2016-04-14 15:54:21

如果msg_id为NULL,则不能使用等于(=)运算符比较NULL值。

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

https://stackoverflow.com/questions/36616245

复制
相关文章

相似问题

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