2

SQLデータベースで、(2つの日付間の減算の結果として)期間をintとして秒単位で取得するいくつかの選択を行います。しかし、この結果を「hh:mm」や「dd:hh」のような人間が読める形式にフォーマットしたいと考えています。それはSQLで可能ですか?どうすればこれを実現できますか?

4

5 に答える 5

5

SQL 2005 では、以下を使用できます。

    select convert(varchar(8), dateadd(second, [SecondsColumn], 0),  108)

最初に秒を 1900-01-01 より後の日付に変換し、次に hh:mm:ss 部分を取得します。

列が 24 時間を超える場合、これは繰り越されます。日数が必要な場合はロールオーバーされ、その場合は時間数が必要な場合は次のようにします。

case when SecondsColumn> (24*60*60) 
        then 
            cast(datepart(day,datediff(dd, 0, dateadd(second, SecondsColumn, 0))) as varchar(4))
        +   'd' + convert(varchar(2), dateadd(second, SecondsColumn, 0), 108) 
    else
            convert(varchar(8), dateadd(second, SecondsColumn, 0), 108) 
    end
于 2008-10-13T09:47:52.820 に答える
2

データベースごとに異なる方法で行います。私はPostgreSQLを使用していますが、次のようにします:

select to_char(my_date - my_other_date, 'HH:MM:SS');

使用しているデータベースのマニュアルを参照する必要があります。

于 2008-10-13T09:52:26.010 に答える
2

秒があると仮定します:

DECLARE @DurationSeconds INT

-- 25h 45m 14s
SET @DurationSeconds = (25 * 3600) + (45 * 60) + (14)

SELECT 
  @DurationSeconds, 
  @DurationSeconds / 3600 hours, 
  @DurationSeconds % 3600 / 60 minutes,
  @DurationSeconds % (3600 / 60) seconds

私はあなたにそれをうまくフォーマットするタスクを任せます。:-)

于 2008-10-13T09:55:58.310 に答える
0

Oracle SQL の場合:

   -- 86,400 seconds in a  day
   --  3,600 seconds in an hour
   --     60 seconds in a  minute
   select duration, -- seconds
    trunc((duration)/86400) || ':' || -- dd
    trunc(mod(duration,86400)/3600) || ':' || -- hh
    trunc(mod(mod(duration,86400),3600)/60) || ':' || -- mm
    mod(mod(mod(duration,86400),3600),60) -- ss
   as human_readable
   from dual
   ;
于 2012-02-07T23:35:03.727 に答える
0

多くの DBMS には独自のカスタム構文がありますが、標準はありません。

一般に、データベースの近くではなく、アプリケーションのプレゼンテーション層で人間が読みやすいように書式設定作業を行う方が適切です。

于 2008-10-13T13:08:55.783 に答える