我必须用时间内部填充这些表:
CREATE TABLE [dbo].[D_TIME_test](
[DTMINUTES1] [datetime] NULL,
[DTMINUTES5] [datetime] NULL,
[DTMINUTES15] [datetime] NULL,
[DTMINUTES30] [datetime] NULL,
[DTMINUTES60] [datetime] NULL
) ON [PRIMARY]
所以我需要这样的表格:
我使用的一栏:
DECLARE @start DATETIME, @end DATETIME
SET @start = '20120901';
SET @end = '20170101';
WHILE @start < @end
BEGIN
INSERT INTO D_TIME_test
VALUES (@start)
SET @start = DATEADD(MINUTE, 1, @start)
END
如何更改此查询以填充上表?
答案 0 :(得分:1)
试试这个
DECLARE @start DATETIME, @end DATETIME
SET @start = '20151231 10:00';
SET @end = '20151231 15:00';
DECLARE @result_tbl TABLE(DTMINUTES1 DATETIME,
DTMINUTES5 DATETIME,
DTMINUTES15 DATETIME,
DTMINUTES30 DATETIME,
DTMINUTES60 DATETIME)
WHILE @start < @end
BEGIN
INSERT INTO @result_tbl(DTMINUTES1, DTMINUTES5, DTMINUTES15, DTMINUTES30, DTMINUTES60)
VALUES(@start,
DATEADD(mi,
- DATEPART(mi, @start) % 5,
@start),
DATEADD(mi,
- DATEPART(mi, @start) % 15,
@start),
DATEADD(mi,
- DATEPART(mi, @start) % 30,
@start),
DATEADD(mi,
- DATEPART(mi, @start) % 60,
@start))
SET @start = DATEADD(MINUTE, 1, @start)
END
SELECT * FROM @result_tbl
答案 1 :(得分:1)
您可以先执行脚本,然后使用
更新其他列UPDATE D_TIME_test SET
DTMINUTES5 = DATEADD(mi, (DATEDIFF(mi, 0, DTMINUTES1) / 5) * 5, 0)
, DTMINUTES15 = DATEADD(mi, (DATEDIFF(mi, 0, DTMINUTES1) / 15) * 15, 0)
, DTMINUTES30 = DATEADD(mi, (DATEDIFF(mi, 0, DTMINUTES1) / 30) * 30, 0)
, DTMINUTES60 = DATEADD(mi, (DATEDIFF(mi, 0, DTMINUTES1) / 60) * 60, 0)
或者您可以编辑添加其他列的脚本
DECLARE @start DATETIME, @end DATETIME
SET @start = '20120901';
SET @end = '20170101';
WHILE @start < @end
BEGIN
INSERT INTO D_TIME_test
VALUES (@start
, DATEADD(mi, (DATEDIFF(mi, 0, @start) / 5) * 5, 0)
, DATEADD(mi, (DATEDIFF(mi, 0, @start) / 15) * 15, 0)
, DATEADD(mi, (DATEDIFF(mi, 0, @start) / 30) * 30, 0)
, DATEADD(mi, (DATEDIFF(mi, 0, @start) / 60) * 60, 0)
)
SET @start = DATEADD(MINUTE, 1, @start)
END
DATEADD(mi, (DATEDIFF(mi, 0, @start) / 60) * 60, 0)
获取固定值(在本例中为0)和@start
之间的分钟差异,并在将除法的余数除去60之后将其添加回相同的值
在SQL Server中,如果除法的两个部分都是整数类型,则结果也是整数类型,因此不需要使用FLOOR
。