我有一系列天数,如下所示:
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 |
我无法计算的是这个伪代码: "给定一系列天数和开始日期,在该日期之后第一次出现"。
答案 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