选择给定开始日期和结束日期之间的天数

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/…

以上是关于选择给定开始日期和结束日期之间的天数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算两个日期之间的天数

计算每年开始和结束日期之间的天数

计算员工在开始和结束日期之间应报告工作的天数

如何设置开始日期和结束日期之间的验证应在 3 年内选择

如何选择实体的计数,其中时间序列日期介于该实体的开始日期和结束日期之间

如果日期列介于开始日期和结束日期之间,则选择行 FMDB 请求