这更像是一个最佳实践问题,尽管我在 sql 上苦苦挣扎,但 2 是相关联的。我想将从早上 6 点开始的即将到来的 24 小时期间的日期和时间插入到 sql 数据库中。
我认为最好在下一天凌晨 1 点运行预定的 SQL 作业。这将创建一列和 24 行,例如 20/03/2013 06:00 到 21/03/2013 05:00。
谢谢
这更像是一个最佳实践问题,尽管我在 sql 上苦苦挣扎,但 2 是相关联的。我想将从早上 6 点开始的即将到来的 24 小时期间的日期和时间插入到 sql 数据库中。
我认为最好在下一天凌晨 1 点运行预定的 SQL 作业。这将创建一列和 24 行,例如 20/03/2013 06:00 到 21/03/2013 05:00。
谢谢
问题是日期时间函数。这是一个如何完成的示例(在 SQL Server 中):
insert into t(thedatetime)
select dateadd(hour, hrs.hr, cast(CAST(getdate() as DATE) as datetime))
from (select 0 as hr union all select 1 union all select 2 union all select 3 union all
select 4 union all select 5 union all select 6 union all select 7 union all
select 8 union all select 9 union all select 10 union all select 11 union all
select 12 union all select 13 union all select 14 union all select 15 union all
select 16 union all select 17 union all select 18 union all select 19 union all
select 20 union all select 21 union all select 22 union all select 23
) as hrs;
在 Oracle 中,select
可能是:
select trunc(sysdate) + hrs.hr/24.0
其他数据库也有类似的结构。
这是假设它在相关日期的午夜之后运行。对于第二天,您必须在当前日期上增加一天。
这适用于 Postgres:
select timestamp '2013-03-30 06:00' + interval '1' hour * i
from generate_series(0,23) i;
这将适用于ORACLE
SELECT To_date('22-03-2013 '||(CASE WHEN (6+(LEVEL-1))>12 THEN (CASE WHEN LEVEL>19 THEN (LEVEL-12-7) ELSE (6+(LEVEL-1))-12 END) ELSE (6+(LEVEL-1)) END)||':00:00','DD-MM-YYYY HH:MI:SS')
FROM dual CONNECT BY LEVEL<=24;