如何使用日历表在两个日期之间获得周数?

时间:2016-03-15 10:45:21

标签: sql sql-server

我的表table1有两列

start_date end_date
03/09/2016 03/15/2016

现在我需要这两个日期之间的所有星期开始和结束日期

week_start_date     week_end_date
03/07/2016          03/11/2016
03/14/2016          03/18/2016

我有calendar表,其中包含日期和星期开始日期以及从11月1日开始的结束日期。 我试图加入它,但它没有产生预期的结果。

SELECT DISTINCT r.START_DATE, r.END_DATE, c.week_start_date, c.week_end_date
FROM [table1] AS r
LEFT JOIN [Calendar] AS c
  ON c.week_start_date BETWEEN r.WEEK_START_DATE AND r.WEEK_END_DATE

如何使用sql查询实现此目的。没有程序或t-sql请或变量。

1 个答案:

答案 0 :(得分:1)

我认为问题是on子句中的逻辑:

select distinct r.START_DATE, r.END_DATE, c.week_start_date,c .week_end_date
from table1 r join
     calendar c
     on c.week_start_date <= r.end_date and
        c.week_end_date >= r.start_date;

注意:

  • select distinct应该是不必要的(除非日历表是白天)。
  • left join是不必要的。