PL/SQL 中的日期范围
如果我有一个带有名为 created_date
的日期列(日期字段)的表,其值类似于“9/2/2010 5:25:42 PM”。
我想选择从 start_date
到 end_date
的所有行。但是,end_date
可能为null
。在本例中,我想选择 created_date
大于 end_date
的所有行。
If I have table with a Date column (Date field) called created_date
, with values like "9/2/2010 5:25:42 PM".
I want to select all rows from a start_date
to a end_date
. However, the end_date
may be null
. In this case, I want to select all rows where created_date
is greater than end_date
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
由于 toDate (可以为空)是一个主变量,它比已经给出的解决方案更容易(在这方面都是错误的,顺便说一句)
Since toDate (which can be null) is a host variable, it's easier than the solutions already given (which are all wrong in that regard, btw)
选择 *
从表
其中created_date >= '2010-09-02'
并且(created_date 为NULL 或created_date <= '2010-09-03')
select *
from TABLE
where created_date >= '2010-09-02'
and (created_date is NULL or created_date <= '2010-09-03')
为什么只使用一个简单的 SQL 查询,就像这样:
编辑
您可以定义一个类似于 ammoQ 定义的查询,即类似这样的查询:
但是,当您使用 PL/SQL,您可以检查
end_date
参数的可为空性:请注意,如果
created_date
不为空,您可以删除created_date is null
条件可为空的列...Why just use a simple SQL query for that, like this one:
Edit
You can define a query like the one defined by ammoQ, i.e. something like that:
However, as you are using PL/SQL, you can check the nullability of
end_date
parameter:Note that you can remove the
created_date is null
condition ifcreated_date
is not a nullable column...如果我从你的问题中得到它
这应该有效:
If i took it right from your question
this should work: