创建日期/小时表?

时间:2018-03-29 09:29:33

标签: sql sql-server-2012 lookup-tables

我基本上需要创建一个类似于下面的表

Date        |       Hour 
01-01-2016  |        0
01-01-2016  |        1
01-01-2016  |        2
01-01-2016  |        3

依此类推,从2016年1月1日至昨天的每个日期。它包含一个日期列,每小时每个日期有24行。

最好的方法是什么?

3 个答案:

答案 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)

Example at SQL Fiddle.

答案 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方法被称为它返回小时。 :)