SQL 每 7 天插入日期,持续 10 年
Posted
技术标签:
【中文标题】SQL 每 7 天插入日期,持续 10 年【英文标题】:SQL Insert Dates every 7 days for 10 years 【发布时间】:2015-09-05 00:51:15 【问题描述】:我正在尝试编写一个查询脚本,在接下来的 10 年中每 7 天将日期插入表中。这将使我不必手动输入这些日期。
有没有办法在每次插入时指定开始日期并在该日期上添加 7 天,直到到达结束日期?
附上我的查询。不知道在哪里。非常感谢任何帮助。
declare @startDate date
declare @endDate date
set @startDate='2015-01-03'
set @endDate='2015-01-04'
INSERT INTO TimePeriod (YearsA)
VALUES ('2015-01-03'),
('2015-01010'),
(etc.)
('2025-01-04)
【问题讨论】:
您想在表格中插入最长 10 年的每天日期 一旦你插入了下一个 10 年的行,下周你只会出现一周而不是 10 年?你的桌子只需要一周的约会,而不是另外 10 年的 为什么不只添加另外 20 年的日期,而您不需要再插入 10 年的行? 我的结果应该看起来像第 1 行 01-03-205、第 2 行 01-10-2015、第 3 行 01-17-2015 等 10 年。所以我只是在前一个日期上增加 7 天,直到到达结束日期。那可能是 10 年甚至更长时间......我只需要每行中每个星期六的日期......如果这有意义的话 我只是想知道是否有一个脚本可以循环遍历日期并添加 7 天,同时只要我指定的结束日期不断地将这些日期插入到表格中 【参考方案1】:以下查询将为您提供直到2042-05-17
年的周末日期。
SELECT DISTINCT DATEADD(DAY, - DATEPART(WEEKDAY, DayNumber), CAST(DayNumber AS DATE))
FROM(
SELECT TOP (10000)
DATEADD(DAY
,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1
, CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '0101' ) DayNumber
From master..spt_values x Cross Join master..spt_values y
)x
ORDER BY DATEADD(DAY, - DATEPART(WEEKDAY, DayNumber), CAST(DayNumber AS DATE))
结果
2015-01-03
2015-01-10
2015-01-17
2015-01-24
2015-01-31
2015-02-07
2015-02-14
2015-02-21
2015-02-28
【讨论】:
【参考方案2】:您可以使用递归 CTE 来获取所有日期: 试试;
declare @startDate date
declare @endDate date
set @startDate='2015-03-01' -- YYYY-MM-DD format
set @endDate='2015-04-01'
;with all_date as (
select @startDate Dates
union all
select DATEADD(day, 7, Dates)
from all_date
where Dates < @endDate
)
INSERT INTO TimePeriod (YearsA)
select Dates from all_date
【讨论】:
以上是关于SQL 每 7 天插入日期,持续 10 年的主要内容,如果未能解决你的问题,请参考以下文章