【问题标题】:Converting varchar(6) in HHmmss format to sql time format将 HHmmss 格式的 varchar(6) 转换为 sql 时间格式
【发布时间】:2017-01-06 08:27:28
【问题描述】:

如何将存储在DB 中的内容转换为varchar(6)(例如,180000 实际上是HHmmss 的格式)到时间,我尝试了以下但不会工作

select convert(time,'180000')
select cast('180000' as time)

【问题讨论】:

  • 不要将日期时间存储为 varchar。
  • 我不能在它的 DBF 导入的数据库上做任何事情,我需要数据来创建 RDLC 报告
  • 好的,你发帖前有没有在这里搜索过……现在有很多类似的帖子。例如:stackoverflow.com/questions/14293617/convert-varchar-to-time
  • 是的,没用
  • 只有在类似于 select cast('18:00:00' as time) 时才有效

标签: sql sql-server-2012 time-format


【解决方案1】:

另一种方法

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

SELECT CAST(STUFF(STUFF(@t,5,0,':'),3,0,':') AS time)

感谢@SebtHU,他指出,在09:15:0000:45:00 等时间,这不适用于前导零。你可以改用这个:

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

【讨论】:

  • 注意,这不适用于“无前导零”值,例如 09:15:00 的 91500 或 00:45:00 的 4500。 (例如,msdb.dbo.sysjobschedules 充满了这些)。需要先添加零,例如使用 REPLICATE。
  • @SebTHU,谢谢,你是对的。我建议使用RIGHT(CONCAT('000000',@t),6)
【解决方案2】:

试试这个:

select cast((substring('180000',0,3)+':'+substring('180000',3,2)+':'+substring('180000',5,2)) as time)

【讨论】:

    【解决方案3】:
    select cast(format(180000, '00:00:00') as time), cast(format(131, '00:00:00') as time)
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 2020-12-28
      • 2021-08-12
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多