首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个条件为null,则获取所有行

如果一个条件为null,则获取所有行
EN

Stack Overflow用户
提问于 2019-08-30 04:57:42
回答 1查看 129关注 0票数 1

我有个问题。我正在尝试创建一个查询,其中我传递了一个参数p_effective_date。如果我们没有在这个参数中传递任何值,那么我希望在没有这个条件的情况下执行整个查询。

也就是说,p_effective_date被传递为null,那么查询仍然应该运行以获得输出。

如果p_effective_date为null,则不应考虑条件paam.effective_start_date > p_effective_date

代码语言:javascript
复制
SELECT DISTINCT PAAM.ASSIGNMENT_NUMBER "Assignment Number",
paam.action_code    

FROM 
PER_ASSIGNMENT_EXTRA_INFO_M PAEI,
PER_ALL_ASSIGNMENTS_M PAAM

WHERE 1=1
and PAAM.ASSIGNMENT_ID= PAEI.ASSIGNMENT_ID
and paam.assignment_type ='E'
and paei.INFORMATION_TYPE='Tal'
and paam.assignment_status_type='ACTIVE'
And paam.effective_start_date >  p_effective_date
AND TRUNC(SYSDATE) between PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) between PAEI.EFFECTIVE_START_DATE AND PAEI.EFFECTIVE_END_DATE
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-30 23:09:54

这听起来像是NVL函数的工作。NVL测试null,如果值为null,它将其替换为另一个值(如零)。

代码语言:javascript
复制
SELECT DISTINCT PAAM.ASSIGNMENT_NUMBER "Assignment Number",
paam.action_code    

FROM 
PER_ASSIGNMENT_EXTRA_INFO_M PAEI,
PER_ALL_ASSIGNMENTS_M PAAM

WHERE 1=1
and PAAM.ASSIGNMENT_ID= PAEI.ASSIGNMENT_ID
and paam.assignment_type ='E'
and paei.INFORMATION_TYPE='Tal'
and paam.assignment_status_type='ACTIVE'
And paam.effective_start_date >  NVL(p_effective_date,0)
AND TRUNC(SYSDATE) between PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) between PAEI.EFFECTIVE_START_DATE AND PAEI.EFFECTIVE_END_DATE

由于paam.effective_start_date > 0始终为true (假设paam.effective_start_date本身不为null ),因此当paam.effective_start_date为null时,此WHERE子句将不会消除任何行,这与子句根本不存在具有相同的效果。请记住,您不必在NVL函数中使用0,您可以将p_effective_date替换为您知道的始终小于paam.effective_start_date的日期,或者替换为任何其他值,只要它根据您的数据返回正确的结果。

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

https://stackoverflow.com/questions/57717644

复制
相关文章

相似问题

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