sql - 如何在 where 子句中使用 NVL

标签 sql oracle

我有以下代码:

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 是参数。在正常情况下,每个参数都是 NULL。但是然后 where 子句 AND msg_id = NVL(P_ID, msg_ID)不要返回 msg_id 本身为 NULL 的行。我错过了什么?

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

最佳答案

尝试这个;)

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;

关于sql - 如何在 where 子句中使用 NVL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616245/

相关文章:

sql - BigQuery 使用新的 SQL 语法访问 CustomDimensions

mysql - 仅将非重复项插入没有键的 MySQL 表中

一个过程中的 MySQL 多个命令

mysql - 如何从左连接返回所有空值?

mysql - SQL查询最大最小值

java - 连接到 Amazon RDS Oracle 实例时如何处理 "Got minus one from a read call"错误

java - 持久性、oracle Thin、ORA-12505、TNS 监听器当前不知道 SID

sql - 在 SQL 中计算校验和

java - Spring JPA中调用oracle函数

java - Oracle 查询根据子表中的值对表进行过滤和排序