0

これは、SQLに苦労していますが、2つはリンクされていますが、より多くのベストプラクティスの質問です。午前6時から始まる次の24時間の日付と時刻をSQLデータベースに挿入したいと思います。

次の日の午前1時にスケジュールされたSQLジョブを実行するのが最善だと思います。これにより、たとえば20/03/201306:00から21/03/201305:00までの1つの列と24の行が作成されます。

ありがとう

4

3 に答える 3

1

問題は日時関数です。これを(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

また、他のデータベースにも同様の構成があります。

これは、問題の日付の午前0時以降に実行されていることを前提としています。翌日は、現在の日付に1日を追加する必要があります。

于 2013-03-22T13:44:07.427 に答える
0

これはのために動作します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;
于 2013-03-22T13:09:13.907 に答える
0

これはPostgresで機能します:

select timestamp '2013-03-30 06:00' + interval '1' hour * i
from generate_series(0,23) i;
于 2013-03-22T13:46:39.590 に答える