TSQL 将 HHMMSS 的 VARCHAR 转换为 TIME
TSQL Convert VARCHAR of HHMMSS to TIME
我有一个 VARCHAR 字段,其示例值如下所列,我想将其转换为 HH:MM:SS。建议?
151200
085800
080100
210100
083300
在 Sql-Server 试试这个:
declare @t varchar(10)
set @t='151200'
select left(@t,2) + ':' + substring(@t,3,2) + ':' + right(@t,2)
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
Returns
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
EDIT:
根据您的版本,考虑到您将时间值存储在 varchar 中(这意味着您可能拥有虚假数据),您可以使用:
try_convert(time,stuff(stuff(TimeStr,5,0,':'),3,0,':'))
如果您使用的是 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)
这将 return 时间。更多信息,请看这里:https://msdn.microsoft.com/en-us/library/hh213398.aspx
如果时间存储为 INT,则以下在 SQL Server 2019 上运行良好:
DECLARE @time INT = 912;
SELECT TRY_CONVERT(time, FORMAT(@time, '00:00:00'))
这也允许使用以下内容提取秒数
SELECT DATEDIFF(second, 0, TRY_CONVERT(time, FORMAT(@time, '00:00:00')))
并且,在使用 msdb.dbo.sysjobhistory
时,出于某种原因将 run_duration 存储为这种格式的 INT hhmmss
SELECT duration_seconds = DATEDIFF(second, 0, TRY_CONVERT(time, FORMAT(run_duration, '00:00:00')))
,duration_time = TRY_CONVERT(time, FORMAT(run_duration, '00:00:00'))
, * FROM msdb.dbo.sysjobhistory
我有一个 VARCHAR 字段,其示例值如下所列,我想将其转换为 HH:MM:SS。建议?
151200
085800
080100
210100
083300
在 Sql-Server 试试这个:
declare @t varchar(10)
set @t='151200'
select left(@t,2) + ':' + substring(@t,3,2) + ':' + right(@t,2)
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
Returns
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
EDIT:
根据您的版本,考虑到您将时间值存储在 varchar 中(这意味着您可能拥有虚假数据),您可以使用:
try_convert(time,stuff(stuff(TimeStr,5,0,':'),3,0,':'))
如果您使用的是 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)
这将 return 时间。更多信息,请看这里:https://msdn.microsoft.com/en-us/library/hh213398.aspx
如果时间存储为 INT,则以下在 SQL Server 2019 上运行良好:
DECLARE @time INT = 912;
SELECT TRY_CONVERT(time, FORMAT(@time, '00:00:00'))
这也允许使用以下内容提取秒数
SELECT DATEDIFF(second, 0, TRY_CONVERT(time, FORMAT(@time, '00:00:00')))
并且,在使用 msdb.dbo.sysjobhistory
时,出于某种原因将 run_duration 存储为这种格式的 INT hhmmss
SELECT duration_seconds = DATEDIFF(second, 0, TRY_CONVERT(time, FORMAT(run_duration, '00:00:00')))
,duration_time = TRY_CONVERT(time, FORMAT(run_duration, '00:00:00'))
, * FROM msdb.dbo.sysjobhistory