2017-10-15 4 views
2

テーブル "time_hours"に24時間保存する必要があります。ここに私のテーブルの構造は次のとおりです。"time_hour"テーブルを自動的に設定する

Create table time_hours 
    (HOURS number, 
    HOUR_RANGE VARCHAR (20), 
    HOUR_MIN VARCHAR (20), 
    HOUR_MAX VARCHAR(20)); 

は、ここで私がこれまで持っているスクリプトです:

Insert into time_hours(HOURS, 
    HOUR_RANGE, 
    HOUR_MIN, 
    HOUR_MAX) 
Select 
to_number(to_char(t,'HH24'),'00'), 
to_char(t,'HH24:MI:SS'), 
to_char(t,'HH24:MI:SS'), 
to_char(t,'HH24:MI:SS') 
FROM 
    (
    Select trunc(sysdate) + (level-1)/24 as t 
    FROM dual 
    Connect by level <=24 
    ); 

結果は次のとおりです。

Hours | HOUR_RANGE | HOUR_MIN | HOUR_MAX 
0  00:00:00 00:00:00 00:00:00 
1  01:00:00  01:00:00 01:00:00  
..  
23  23:00:00  23:00:00 23:00:00 

私はこの出力を必要とするしかし:

Hours | HOUR_RANGE | HOUR_MIN | HOUR_MAX 
0  00h-00h59 00:00:00 00:59:59 
1  01h00-01h59 01:00:00 01:59:59 
2  02h00-02h59 02:00:00 02:59:59 
..  ..   ..   .. 
23  23h00-23h59 23:00:00 23.59.59 

私の質問: 「HOUR_RANGE」列と「HOUR_MAX」列をどのようにフォーマットして、期待される出力を得ることができますか?

はあなたの助けあなたが使用することができ

+0

OracleのINTERVAL DAY TO SECONDデータ型を使用することを検討する必要があります。あなたはあなたのアプリケーションで問題が少なくなります。 –

答えて

0

、それだけで時間を含む文字列に加えて他のいくつかの文字です。日付変換はまったく必要ありません。

insert into time_hours(hours, hour_range, hour_min, hour_max) 
select 
    level-1 as hours, 
    to_char(level-1, '00') || 'h00-' || to_char(level-1, '00') || 'h59' as hour_range, 
    to_char(level-1, '00') || ':00:00'as hour_min, 
    to_char(level-1, '00') || ':59:59'as hour_max 
from dual connect by level <= 24; 
+0

こんにちはThorsten、そうです、日付の変換は必要ありません、ちょうど時間+他の文字、Thanks heaps !!! – Esperanza

2

、事前にすべてのいただきありがとうございます:

Select 
    to_number(to_char(t,'HH24'),'00') AS Hours, 
    to_char(t,'HH24"h"MI"-"HH24"h59"') AS HOUR_RANGE, 
    to_char(t,'HH24:MI:SS') AS HOUR_MIN, 
    to_char(t+1/24-1/(24*3600),'HH24:MI:SS') AS HOUR_MAX 
FROM (Select trunc(sysdate) + (level-1)/24 as t 
    FROM dual 
    Connect by level <=24); 

Rextester Demo

0

私はあなたが以下のコードを使用することができると思います。

パイプラインを使用して文字を連結できます。

いくつかの算術演算を使用して、与えられた時間の最大分と秒を得ることができます。 1/24 * 60 = 1/1440で日付値に1分を加算します。 1/24 * 60 * 60 = 1/86400で日付値に秒を加算します。結局のところ

INSERT INTO time_hours (HOURS, HOUR_RANGE, HOUR_MIN, HOUR_MAX) 
    SELECT 
    to_number(to_char(t, 'HH24'), '00'), 
    to_char(t, 'HH24') || 'h' || to_char(t, 'MI') || '-' || to_char(t, 'HH24') || 'h59', 
    to_char(t, 'HH24:MI:SS'), 
    to_char(t + 1/86400*59 + 1/1440*59, 'HH24:MI:SS') 
    FROM (SELECT trunc(SYSDATE) + (LEVEL - 1)/24 AS t 
     FROM dual 
     CONNECT BY LEVEL <= 24); 

Query Result

関連する問題