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

HH:MM:SSの日付間のOracleSQL時間の違い

    列がすでに日付であり、したがって、実行している文字列への変換と文字列からの変換が無意味であり、差が常に1日未満になると仮定すると、次のことができます。

    to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
    

    これにより、日付間の差が1日の端数として取得されます。 abs()を介してポジティブであることを確認します;次に、その端数を名目上の日付に戻します。この日付の時刻は深夜です。次に、それを文字列に変換し、その時点のみを確認します。

    クイックデモ:

    -- CTEs to supply the two date/times
    with stp (created_date) as (
      select cast(timestamp '2018-02-26 12:59:21' as date) from dual
    ),
    adhh (created_date) as (
      select cast(timestamp '2018-02-26 12:59:32' as date) from dual
    )
    select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
    from stp cross join adhh;
    
    TO_CHAR(
    --------
    00:00:11
    

    差が1日を超える可能性があるが、1年を超える可能性がある場合は、フォーマットモデルを'FMDDD FMHH24:MI:SS'のようなものに変更できます。 、開始時に丸一日表示されます。



    1. goinsqlを使用して動的クエリを実行します

    2. SQLServerのワークロードを理解する

    3. サブクエリを使用せずに最大シーケンスの行のみを選択する方法は?

    4. Hekatonサンプルに関するいくつかの小さな問題