我有以下日期格式92845
代表hhmmss
。
我想将其转换为SQL中的datetime
。
我可以使用这样的东西:
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
但似乎T-SQL不喜欢hour
部分。
答案 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