92845
を表す次の日付形式がありhhmmss
ます。
datetime
それをin SQL に変換したいと思います。
次のようなものを使用できます。
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
しかし、T-SQLはそのhour
部分を好まないようです。
ありがとう!
92845
を表す次の日付形式がありhhmmss
ます。
datetime
それをin SQL に変換したいと思います。
次のようなものを使用できます。
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
しかし、T-SQLはそのhour
部分を好まないようです。
ありがとう!
午後にコードを書いたようですが、今は午前中には機能しません。絶対位置に基づいて詰め込む場合は、文字列が常に同じ長さであることを確認する必要があります。これを行う 1 つの方法は、文字列に 0 を埋め込んでから、右端の 6 文字を取得することです。また、 H/M セパレーターは必要あり:
ません。-
SELECT STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':');
結果:
08:49:36
これで、日時に変換できます。
SELECT CONVERT(DATETIME, STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':'));
結果:
1900-01-01 08:49:36.000
92845
現在どこに保管されているかわかりません。変数にある場合、次のようなものが機能します。
declare @t varchar(6) = '92845';
declare @fullt char(6) = RIGHT('000000' + @t,6)
select DATEADD(second,
SUBSTRING(@fullt,1,2) * 3600 +
SUBSTRING(@fullt,3,2) * 60 +
SUBSTRING(@fullt,5,2),0)
結果:
1900-01-01 09:28:45.000
結果セットの列にある場合は、サブクエリなどを使用して同様の操作を行うことができます。
これを試して:
declare @t varchar(6) = '134524'
select CASE WHEN len(@t)=5 then convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+'0'+LEFT(@t,1)+':'+SUBSTRING(@t,2,2)+':'+SUBSTRING(@t,4,2))
else convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+LEFT(@t,2)+':'+SUBSTRING(@t,3,2)+':'+SUBSTRING(@t,5,2)) end