将 HHmmss 格式的 varchar(6) 转换为 sql 时间格式

Vis*_*abu 3 sql time-format sql-server-2012

这怎么可能存储在东西转换DBvarchar(6)(例如,180000这实际上是在一种格式HHmmss)来的时候,我尝试以下,但不会工作

select convert(time,'180000')
select cast('180000' as time)
Run Code Online (Sandbox Code Playgroud)

Shn*_*ugo 8

另一种方法

DECLARE @t VARCHAR(6)='180000';

SELECT CAST(STUFF(STUFF(@t,5,0,':'),3,0,':') AS time)
Run Code Online (Sandbox Code Playgroud)

感谢@SebtHU,他指出,在09:15:00或等时间使用前导零时,这不起作用00:45:00。您可以改用它:

SELECT CAST(STUFF(STUFF(RIGHT(CONCAT('000000',@t),6),5,0,':'),3,0,':') AS time);
Run Code Online (Sandbox Code Playgroud)

  • 注意,这不适用于“无前导零”值,例如 91500 表示 09:15:00,或 4500 表示 00:45:00。(例如,msdb.dbo.sysjobschedules 就充满了这些)。需要先添加零,例如使用 REPLICATE。 (2认同)
  • @SebTHU,谢谢,你是对的。我建议在 `RIGHT(CONCAT('000000',@t),6)` 上使用一些东西 (2认同)