选择给定开始日期和结束日期之间的天数
Posted
技术标签:
【中文标题】选择给定开始日期和结束日期之间的天数【英文标题】:Select days between given start and end date 【发布时间】:2014-05-13 12:45:41 【问题描述】:我需要生成 2 个给定日期之间的天数列表。 查询应该类似于
Select ... from ... where "date" is between date1 and date2
“2014-05-12”和“2014-05-16”的响应应该是
Monday | 2014-05-12
Tuesday | 2014-05-13
Wednesday| 2014-05-14
Thursday | 2014-05-15
Friday | 2014-05-16
开始日期和结束日期的间隔永远不会超过 1 个月,并且始终是未来的日期。 我最好不要制作包含所有日期的表格或视图,但如果那是唯一的解决方案......
我找到了generate days from date range,但给定的查询出错了,我完全不明白,所以无法开始查找可能导致错误的原因。
感谢您的帮助
【问题讨论】:
您尝试的代码是什么,遇到了什么错误? 【参考方案1】:with days as (
select date '2014-05-12' + (level - 1) as day
from dual
connect by level <= date '2014-05-16' - date '2014-05-12' + 1
)
select *
from days
order by day;
SQLFiddle:http://sqlfiddle.com/#!4/d41d8/29558
如果您经常需要此功能,最好创建一个为您执行此操作的函数:
create or replace type date_list as table of date
/
create or replace function generate_series(p_start_date date, p_end_date date)
return date_list
pipelined
is
l_count integer;
begin
l_count := trunc(p_end_date) - trunc(p_start_date);
for i in 0..l_count loop
pipe row (p_start_date + i);
end loop;
end;
/
【讨论】:
@Thomass:是的,它返回DATE
值,可以使用to_char()
格式化。详见手册:docs.oracle.com/cd/E11882_01/server.112/e41084/…以上是关于选择给定开始日期和结束日期之间的天数的主要内容,如果未能解决你的问题,请参考以下文章