TSQL将VARCHAR转换为TIME

时间:2017-01-25 20:48:28

标签: sql sql-server tsql datetime sql-convert

我有一个VARCHAR字段,其中包含如下所示的样本值,我想将其转换为HH:MM:SS。建议?

151200
085800
080100
210100
083300

3 个答案:

答案 0 :(得分:4)

Declare @YourTable table (TimeStr varchar(25))
Insert Into @YourTable values
('151200'),
('085800'),
('080100'),
('210100'),
('083300')


Select *
      ,AsTime = cast(stuff(stuff(TimeStr,5,0,':'),3,0,':') as time)
 From @YourTable

返回

TimeStr AsTime
151200  15:12:00.0000000
085800  08:58:00.0000000
080100  08:01:00.0000000
210100  21:01:00.0000000
083300  08:33:00.0000000
  

修改

根据您的版本,考虑到您将时间值存储在varchar中(这意味着您可能有虚假数据),您可以使用:

try_convert(time,stuff(stuff(TimeStr,5,0,':'),3,0,':'))

答案 1 :(得分:4)

如果您使用的是SQL Server 2012或更高版本,并希望将这些值存储为实际的TIME数据类型,则可以使用TIMEFROMPARTS函数。

例如:

DECLARE @d VARCHAR(10)
SET @d = '151200'

SELECT TIMEFROMPARTS(LEFT(@d,2), SUBSTRING(@d,3,2), RIGHT(@d,2), 0)

这将返回TIME。有关详细信息,请参阅:https://msdn.microsoft.com/en-us/library/hh213398.aspx

答案 2 :(得分:2)

在Sql-Server上试试这个:

declare @t varchar(10) 
set @t='151200'

select left(@t,2) + ':' + substring(@t,3,2) + ':' + right(@t,2)