【问题标题】:TSQL Convert VARCHAR of HHMMSS to TIMETSQL 将 HHMMSS 的 VARCHAR 转换为 TIME
【发布时间】:2017-01-25 20:48:28
【问题描述】:

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

151200
085800
080100
210100
083300

【问题讨论】:

  • 什么数据库管理系统? sql-server, postgres, mysql, ...

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


【解决方案1】:
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,':'))

【讨论】:

    【解决方案2】:

    如果您使用的是 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

    【讨论】:

      【解决方案3】:

      在 Sql-Server 上试试这个:

      declare @t varchar(10) 
      set @t='151200'
      
      select left(@t,2) + ':' + substring(@t,3,2) + ':' + right(@t,2)
      

      【讨论】:

        【解决方案4】:

        如果时间存储为 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-06
          • 2019-02-27
          • 2019-06-18
          • 2021-12-18
          • 1970-01-01
          • 2016-02-14
          • 2023-02-04
          • 2015-11-07
          相关资源
          最近更新 更多