T-SQL日期转换

时间:2012-09-27 14:04:29

标签: sql-server tsql

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

我想将其转换为SQL中的datetime

我可以使用这样的东西:

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

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

谢谢你!

3 个答案:

答案 0 :(得分:5)

好像你下午写了代码,现在它早上没有工作。如果您要根据绝对定位进行填充,则需要确保字符串的长度始终相同。一种方法是将字符串填充为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

答案 1 :(得分: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

如果它在结果集的列中,那么您可以使用例如子查询。

答案 2 :(得分: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