2017-11-23 1 views

答えて

3

Oracleでは、intervalsを使用して、時差を表すため、INTERVAL DAY TO SECONDまたはINTERVAL YEAR TO MONTHのいずれかのデータ型を使用します。

しかし、実際には3番目の列が必要ですか?必要に応じて他の2つの列から簡単に計算できます(計算値を格納するのではなく、仮想列を作成することもできます)。次に、開始または終了のいずれかを更新し、差分列を更新することを忘れて、それらが同期しなくなるという問題はありません。

SQL Fiddle

Oracleの11グラムR2スキーマのセットアップ:1

CREATE TABLE your_table (
    start_time TIMESTAMP, 
    end_time TIMESTAMP, 
    difference GENERATED ALWAYS AS (end_time - start_time) 
); 

INSERT INTO your_table (start_time, end_time) 
SELECT SYSTIMESTAMP, SYSTIMESTAMP + INTERVAL '01:02:03' HOUR TO SECOND FROM DUAL; 

問合せ:

SELECT * 
FROM your_table 

Results

|    START_TIME |    END_TIME | DIFFERENCE | 
|-------------------------|-------------------------|------------| 
| 2017-11-23 10:12:06.741 | 2017-11-23 11:14:09.741 | 0 1:2:3.0 | 
-2

日数の差を返す2つの異なる日付を減算すると、返される数値である必要があります。

おかげ Thangamani Eraniyan

+0

「私が開始された、完成したタイムスタンプ」 - そう違いはない間隔の数になります。 –

+0

2つの異なる日付フィールドを減算すると、数値が返されます。は0.0416666を返す。 –

+1

はい、ただし2つの**タイムスタンプを減算する** [間隔を返す] (https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#g196492)。したがって、同等のクエリ 'select systimestamp - (systimestamp - interval '1' hour)from dualは' +00 01:00:00.000000'を返します。これは区間であり、数値ではありません。 –

関連する問題