0

92845を表す次の日付形式がありhhmmssます。

datetimeそれをin SQL に変換したいと思います。

次のようなものを使用できます。

SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-') 

しかし、T-SQLはそのhour部分を好まないようです。

ありがとう!

4

3 に答える 3

6

午後にコードを書いたようですが、今は午前中には機能しません。絶対位置に基づいて詰め込む場合は、文字列が常に同じ長さであることを確認する必要があります。これを行う 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
于 2012-09-27T14:12:18.833 に答える
2

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

結果セットの列にある場合は、サブクエリなどを使用して同様の操作を行うことができます。

于 2012-09-27T14:17:08.877 に答える
0

これを試して:

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
于 2012-09-27T14:32:38.053 に答える