【问题标题】:Query to Convert Varchar HH:MM to Integer Minutes in SQL Server 2008在 SQL Server 2008 中将 Varchar HH:MM 转换为整数分钟的查询
【发布时间】:2019-07-08 16:30:26
【问题描述】:

我在 SQL Server 中有一个表,其中有一个列名 TimeSpent Datatype Varchar(25)。它基本上将时间存储为HH:MM 格式。 根据现在的要求,我希望它给我以分钟为单位的实际时间,即 01:00 给我 60、01:30 -> 90。 请帮我在 SQL Server 2008 中编写查询,以便将 Varchar (HH:MM) 转换为 Minutes(integer)。

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    试试

    SELECT LTRIM(DATEDIFF(MINUTE, 0, TimeSpent)) 
      FROM yourtable
    

    给定

    | TIMESPENT |
    -------------
    |     00:12 |
    |     01:05 |
    |     10:00 |
    

    输出:

    | MINUTES |
    -----------
    |      12 |
    |      65 |
    |     600 |
    

    这里是SQLFiddle

    【讨论】:

    • 出现错误“从字符串转换日期和/或时间时转换失败
    • @DharmendraSingh 请提供您遇到此错误的示例数据
    • 对不起@Peter,查询工作正常。这是我在表中的错误,我正在执行查询的地方有 1000 万条记录,并且 2-3 行的 HH:MM 格式无效,这会导致问题。非常感谢
    • LTRIM 会将DATEDIFF 的漂亮数字响应转换为字符串,如果您尝试按此值排序,则会得到不正确的结果。否则,+1。
    【解决方案2】:

    这将解决您的问题。请参考SQLFiddle

    
    select cast(left(TimeSpent, charindex(':',TimeSpent,0)-1) as int)*60+
           cast(right(TimeSpent, len(TimeSpent)-charindex(':',TimeSpent, 0)) as int)
    from test
    

    【讨论】:

      【解决方案3】:

      SELECT top 1 (substring(CONVERT(VARCHAR(5), TimeSpent, 108), 1, 2) * 60 + substring(CONVERT(VARCHAR(5), TimeSpent, 108), 4, 2)) 作为分钟测试

      【讨论】:

      • 你真的认为使用字符串函数进行时间处理是对公认答案的改进吗?
      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2021-10-29
      • 2013-12-28
      • 2018-05-02
      相关资源
      最近更新 更多