【问题标题】: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,但给定的查询出错了,我完全不明白,所以无法开始查找可能导致错误的原因。

感谢您的帮助

【问题讨论】:

  • 您尝试的代码是什么,遇到了什么错误?

标签: sql oracle date


【解决方案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;
/  

【讨论】:

猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多