T-SQL生成特定日期后的天数序列

时间:2015-08-07 09:34:08

标签: sql tsql

我有一系列天数,如下所示:

DECLARE @days VARCHAR(MAX) = N'Monday, Wednesday, Friday'

n 的出现次数如下:

DECLARE @occurrences INT = 10

通过这种方式,我可以使用以下查询和一个名为 Numbers 的自定义表生成一个表,其中包含1,000,000个数字:

SELECT TOP @occurrences
    Item
FROM 
    dbo.SplitStrings_Numbers(@days, ',')
CROSS JOIN Numbers
ORDER BY n

结果如下:

|----------------------|
| 1 | Monday           |
|----------------------|
| 2 | Wednesday        |
|----------------------|
| 3 | Friday           |
|----------------------|
| 4 | Monday           |
|----------------------|
| 5 | Wednesday        |
|----------------------|
| 6 | Friday           |
|----------------------|

现在我需要完成此功能的是在基于指定日期发生的第一天开始序列。 所以,当我宣布从9月1日开始时

DECLARE @start DATETIME = '2015-09-01'

结果应如下所示:

|------------------------------------|
| 1 | Wednesday      | 2015-09-02    |
|------------------------------------|
| 2 | Friday         | 2015-09-04    |
|------------------------------------|
| 3 | Monday         | 2015-09-07    |
|------------------------------------|
| 4 | Wednesday      | 2015-09-09    |

我无法计算的是这个伪代码: "给定一系列天数和开始日期,在该日期之后第一次出现"。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但它会让你开始:

;With DatesCte AS
(
SELECT TOP(@occurrences) DATEADD(DAY, number-1, @Start) As TheDate
FROM Numbers
), DatesWithWeekDay As
(
SELECT TheDate, DATENAME(WEEKDAY, TheDate) As WeekDayName
FROM DatesCTE
)
SELECT *
FROM DatesWithWeekDay