我基本上需要创建一个类似于下面的表
Date | Hour
01-01-2016 | 0
01-01-2016 | 1
01-01-2016 | 2
01-01-2016 | 3
依此类推,从2016年1月1日至昨天的每个日期。它包含一个日期列,每小时每个日期有24行。
最好的方法是什么?
答案 0 :(得分:0)
您可以使用CTE为每小时生成一行:
; with cte as
(
select cast('2016-01-01' as datetime) as dt
union all
select dateadd(hour, 1, dt)
from cte
where dateadd(hour, 1, dt) < cast(getdate() as date)
)
insert into YourTable
(date, hour)
select cast(dt as date)
, datepart(hour, dt)
from cte
order by
dt desc
option (maxrecursion 0)
答案 1 :(得分:0)
Create table #temp
(
DATE1 DATE,
HOUR INT
);
DECLARE @inc INT
SET @inc = 0
DECLARE @start_date date
SET @start_date = '01-01-2016'
DECLARE @end_date date
SET @end_date = DATEADD (day , -1 , getdate() )
WHILE @start_date<=@end_date
BEGIN
IF(@inc <=23)
BEGIN
INSERT INTO #temp SELECT @start_date As Date,@inc As Hour
SET @inc = @inc+1
END
ELSE
BEGIN
SET @inc = 0
SET @start_date = DATEADD (day , 1 , @start_date )
END
END;
SELECT * FROM #temp;
现场演示
http://sqlfiddle.com/#!18/6727a/4
http://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6b6ac4e15b1a262275a6797e48d5c741
答案 2 :(得分:-1)
在MySQL中试试这个:
create table tablename(date Date,hour number);
insert into tablename(date,hour)values(SUBSTRING(NOW(),1,10),SUBSTRING(NOW(),12,2));
<强>说明:强>
NOW()
在YYYY-MM-DD hh:mm:ss
中返回整个日期.......因此,第一次使用substring()
方法时,它会从NOW方法获取日期,第二次substring
方法被称为它返回小时。 :)