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 年的主要内容,如果未能解决你的问题,请参考以下文章

如何在excel中自动输入日期和时间,如7月1日9:10

如何在 SQL 中设置滚动的 7 天第 75 个百分位数?

参考日期前后的 sql 持续时间

SQL 添加一天开始日期

如何插入 365 行并为每一行增加一天的日期

如何项sql数据库中添加一年的日期