TSQL конвертировать VARCHAR в ВРЕМЯ
У меня есть поле VARCHAR с примерами значений, перечисленных ниже, и я хочу преобразовать его в формат ЧЧ: ММ: СС. Предложения?
151200
085800
080100
210100
083300
4 ответа
На Sql-сервере попробуйте это:
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
Возвращает
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,':'))
Если вы используете 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)
Это вернет ВРЕМЯ. Для получения дополнительной информации, пожалуйста, смотрите это: 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