0

我有以下92845代表的日期格式hhmmss

我想将其转换为datetimeSQL 中的。

我可以使用这样的东西:

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

但似乎 T-SQL 不喜欢这个hour部分。

谢谢你!

4

3 回答 3

6

好像你下午写的代码,现在早上不行。如果要基于绝对定位进行填充,则需要确保字符串始终具有相同的长度。一种方法是用 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 回答