HH:MM:SS
SQL Serverで秒(int)をフォーマットに変換する方法は?
例: 90 は出力 => 00:01:30 になります。
アップデート
2 つの日付がありSTART_DATE
ますENDDATE
。
これらの日付の差が欲しい
HH:MM:SS
また、最後にこれらの形式の違いをまとめたいと思います
HH:MM:SS
SQL Serverで秒(int)をフォーマットに変換する方法は?
例: 90 は出力 => 00:01:30 になります。
アップデート
2 つの日付がありSTART_DATE
ますENDDATE
。
これらの日付の差が欲しい
HH:MM:SS
また、最後にこれらの形式の違いをまとめたいと思います
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');
たとえば、こちらの例を見てください
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')
これは役立つかもしれません-時間部分などを差し引く良い例です。追加/合計できます...:
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
))
/
これにより、有効な .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
あなたが言及しているのは、TIMESPAN
SQLの概念です。ただし、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 は存続します。
select to_char(to_date(90,'sssss'),'hh24:mi:ss') from dual;
この仲間を試してください