我有以下92845
代表的日期格式hhmmss
。
我想将其转换为datetime
SQL 中的。
我可以使用这样的东西:
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
但似乎 T-SQL 不喜欢这个hour
部分。
谢谢你!
我有以下92845
代表的日期格式hhmmss
。
我想将其转换为datetime
SQL 中的。
我可以使用这样的东西:
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
但似乎 T-SQL 不喜欢这个hour
部分。
谢谢你!
好像你下午写的代码,现在早上不行。如果要基于绝对定位进行填充,则需要确保字符串始终具有相同的长度。一种方法是用 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