sql >> データベース >  >> RDS >> Oracle

Oracleの2つのタイムスタンプ間の差をミリ秒単位で計算する

    タイプTIMESTAMPの2つの変数を減算する場合 、INTERVAL DAY TO SECONDを取得します これには、プラットフォームに応じてミリ秒またはマイクロ秒、あるいはその両方が含まれます。データベースがWindowsで実行されている場合は、systimestamp 通常はミリ秒になります。データベースがUnixで実行されている場合は、systimestamp 通常はマイクロ秒になります。

      1  select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' )
      2*   from dual
    SQL> /
    
    SYSTIMESTAMP-TO_TIMESTAMP('2012-07-23','YYYY-MM-DD')
    ---------------------------------------------------------------------------
    +000000000 14:51:04.339000000
    

    EXTRACTを使用できます INTERVAL DAY TO SECONDの個々の要素を抽出する関数

    SQL> ed
    Wrote file afiedt.buf
    
      1  select extract( day from diff ) days,
      2         extract( hour from diff ) hours,
      3         extract( minute from diff ) minutes,
      4         extract( second from diff ) seconds
      5    from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
      6*           from dual)
    SQL> /
    
          DAYS      HOURS    MINUTES    SECONDS
    ---------- ---------- ---------- ----------
             0         14         55     37.936
    

    次に、これらの各コンポーネントをミリ秒に変換して合計します

    SQL> ed
    Wrote file afiedt.buf
    
      1  select extract( day from diff )*24*60*60*1000 +
      2         extract( hour from diff )*60*60*1000 +
      3         extract( minute from diff )*60*1000 +
      4         round(extract( second from diff )*1000) total_milliseconds
      5    from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
      6*           from dual)
    SQL> /
    
    TOTAL_MILLISECONDS
    ------------------
              53831842
    

    ただし、通常は、INTERVAL DAY TO SECONDのいずれかを使用する方が便利です。 2つのTIMESTAMP間の合計ミリ秒数を計算するのではなく、表現するか、時間、分、秒などの列を分離します。 値。



    1. ひねりを加えた時制データベースの設計(ライブ行とドラフト行)

    2. SQLiteでコマンドラインプロンプトを変更する方法

    3. MySQL#1093-FROM句で更新するターゲットテーブル「giveaways」を指定できません

    4. マテリアライズド・ビューと表:利点は何ですか?