1

HH:MM:SSSQL Serverで秒(int)をフォーマットに変換する方法は?

例: 90 は出力 => 00:01:30 になります。

アップデート

2 つの日付がありSTART_DATEますENDDATE

これらの日付の差が欲しい

HH:MM:SSまた、最後にこれらの形式の違いをまとめたいと思います

フィドル: http://sqlfiddle.com/#!3/39c2b/1/0

4

7 に答える 7

3
      declare @sec int
      set @sec=10

      select
          convert(varchar(5),@sec/3600)
           +':'+convert(varchar(5),@sec%3600/60)
           +':'+convert(varchar(5),(@sec%60));


hh:mm:ss としてデータを更新するには、「置換」を使用します

             declare @sec int
             set @sec=90

     select
          replace(convert(varchar(5),@sec/3600)
            +':'+str(convert(varchar(5),@sec%3600/60),2)
            +':'+str(convert(varchar(5),(@sec%60)),2),' ','0');


たとえば、こちらの例を見てください

于 2013-01-02T04:37:51.790 に答える
2
declare @Seconds int;
set @Seconds = 90;
select replace(str(@Seconds/3600,len(ltrim(@Seconds/3600))+
abs(sign(@Seconds/359999)-1)) + ':' + str((@Seconds/60)%60,2)+
':' + str(@Seconds%60,2),' ','0')
于 2013-01-02T04:40:17.110 に答える
0

これは役立つかもしれません-時間部分などを差し引く良い例です。追加/合計できます...:

Select start_date, end_date, time_diff,
   EXTRACT(DAY FROM time_diff) days,
   EXTRACT(HOUR FROM time_diff) hours,
   EXTRACT(MINUTE FROM time_diff) minutes,
   EXTRACT(SECOND FROM time_diff) seconds
From
(
Select start_date, end_date, end_date - start_date time_diff
From
(
Select CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP)  end_date
     , CAST(to_date('01/01/2012 12:00:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP) start_date
From dual
))
/
于 2013-01-02T21:37:19.943 に答える
0

これにより、有効な .NET タイムスタンプが生成されます。ただし、コードは最適化されていません。

create function [dbo].to_timespan(@secs as int) returns nvarchar(16)
begin
    declare @mins int, @hours int, @days int;
    set @days = @secs / (60 * 60 * 24);
    set @secs = @secs - @days * (60 * 60 * 24); 
    set @hours = @secs / (60 * 60);
    set @secs = @secs - @hours * (60 * 60);
    set @mins = @secs / 60;
    set @secs = @secs - @mins * 60;
    return replace(str(@days, 2) + '.' + str(@hours, 2) + ':' + str(@mins, 2) + ':' + str(@secs, 2), ' ', '0');
end
GO
于 2014-01-20T15:29:24.713 に答える
0

あなたが言及しているのは、TIMESPANSQLの概念です。ただし、T-SQL には TIMESPAN 変数はありません。代わりに、次の概念を使用できます。

ElapsedSecond をストレージ変数として使用しません (ただし、機能します)。その理由は、TIMESPAN を効果的に表すには、DATETIME として格納するのが最善だからです。このようにして、DATETIME 変数のすべての柔軟性を得ることができます。たとえば、 、 を実行できYEAR( @TimeSpan)ますMONTH( @TimeSpan )。ElapsedSecond が保存されている場合、それを行うのは難しくなります。

T-SQL の概念を説明するには、次のようにします。

DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
SET @StartDate = '1/1/2013 1:01:58'
SET @EndDate = '1/5/2013 7:02:00'

DECLARE @TimeSpan AS DATETIME
SET @TimeSpan =  @EndDate - @StartDate

PRINT   CONVERT( VARCHAR, (DATEDIFF( DAY, 0, @TimeSpan) * 24) + DATEPART(HOUR, @TimeSpan) )
        + ':' + RIGHT( '0' + CONVERT( VARCHAR, DATEPART( MINUTE, @TimeSpan ) ), 2)
        + ':' + RIGHT( '0' + CONVERT( VARCHAR, DATEPART( SECOND, @TimeSpan ) ), 2 )

上記では、関数を使用して、変数DATEPART()と同じように TimeSpan で作業できることに注意してください。DATETIMEこれは、詳細に進むにつれて、より柔軟で重要になります。

もう 1 つの利点は、NEGATIVE Timespan です。ElapsedSecond メソッドを使用すると、関数は失敗しますが、TimeSpan は存続します。

于 2013-01-02T06:45:04.273 に答える
-1
    select to_char(to_date(90,'sssss'),'hh24:mi:ss') from dual;

この仲間を試してください

于 2013-01-02T04:33:52.473 に答える