我正在尝试插入一些记录,接下来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。
答案 0 :(得分: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创建一个日期范围表,并在表格中插入相关日期。
答案 1 :(得分: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
与上面的内容交换!