1

我正在尝试插入一些记录,接下来的 180 天中的每一天都有一条记录(除了日期之外,每条记录都是相同的)。我不是 100% 最好的方法是什么,但我尝试了以下方法:

insert into [table]
select 12, DateAdd(d, row_number() - 1, GETDATE()), 0, NULL, NULL, NULL, 2
where row_number() < 180

这当然抱怨我没有使用OVER,但我不知道它如何适合这种情况。也许我在更高层次上以错误的方式思考这个问题。

关于最佳方法的任何想法?

有问题的 SQL Server 类型是 MSSQL。

4

2 回答 2

4

假设您有 SQL Server 并愿意在下面的 CTE 中输入开始和结束日期:

with dateranger as
(
    -- put start date here or use getdate()
    select cast('2013-01-01' as datetime) as date_of_interest
    union all
    select dateadd(day, 1, date_of_interest)
    from dateranger
    where dateadd(day, 1, date_of_interest) <= '2013-02-28'
    -- put end date above or use dateadd(d, 180, getdate())
)
insert into your_table
    select 12, date_of_interest, 0, null, null, null, 2 from dateranger

这将使用 CTE 创建一个日期范围表,并在表中插入相关日期。

于 2013-09-14T20:18:05.823 回答
3

数字表!

INSERT INTO your_table (list, of, fields, ..., date_field )
SELECT list
     , of
     , fields
     , ...
     , DateAdd(dd, number, Current_Timetstamp)
FROM   dbo.numbers
WHERE  number BETWEEN 1 AND 180

假设您不想没有时间部分的日期(即yyyy-mm-dd 00:00:00.000

SELECT DateAdd(dd, DateDiff(dd, 0, Current_Timestamp), 0) As date_with_time_truncated

只需将Current_Timestamp第一个查询中的替换为上面的!

于 2013-09-14T19:53:45.723 回答