【问题标题】:How do I convert a time string (2 hours 30 minutes) into a decimal so that it becomes 2.5?如何将时间字符串(2 小时 30 分钟)转换为小数,使其变为 2.5?
【发布时间】:2018-09-28 09:34:15
【问题描述】:

在 Excel 或 SQL 中,如何将时间字符串(例如 2 小时 30 分钟)转换为小数,使其显示为 2.5 小时?这是在 Excel 电子表格中,因此有多个值,其中还包括:2 小时、3 小时、1 小时 15 分钟。是否可以使用公式或 SQL 查询更改所有值?

【问题讨论】:

    标签: sql excel string time decimal


    【解决方案1】:

    我不确定您的字符串是否可以预测,但我尝试了一个分步脚本来组合几个值。您可以使用 LEFT()、RIGHT() 的组合来撬出要用于计算的值,并使用 CAST(col AS NUMERIC) 来使用除法中的字符串值。这是一个可以在任何会话中运行的示例:

        IF OBJECT_ID('TEMPDB..#TEMP') IS NOT NULL
        DROP TABLE #TEMP
    
    CREATE TABLE #TEMP (
        [TimeString]            NVARCHAR(20)
    )
    INSERT INTO #TEMP ([TimeString])
    VALUES('2 hours 30 minutes')
    ,('20 hours 45 minutes')
    ,('3 hours')
    
    SELECT [TimeString]
        ,LEFT([TimeString],2) [Left-side hours]
        ,RIGHT([TimeString],10) [Right-Side Minute]
        ,LEFT(RIGHT([TimeString],10),2) [Left of the right side Minute]
        ,CAST(LEFT(RIGHT([TimeString],10),2) AS NUMERIC(24,2)) [Numeric Minutes]
            --Cast as NUMERIC is important for allowing the precision to calculate decimals.
        ,CAST(LEFT(RIGHT([TimeString],10),2) AS NUMERIC(24,2))/60 [Decimal Minutes]
        ,LEFT([TimeString],2)+CAST(LEFT(RIGHT([TimeString],10),2) AS NUMERIC(24,2))/60 [Put hours and decimal minutes together]
        ,CASE WHEN [TimeString] LIKE '%minutes%' THEN LEFT([TimeString],2)+CAST(LEFT(RIGHT([TimeString],10),2) AS NUMERIC(24,2))/60
            ELSE LEFT([TimeString],2) END [Final Column]
    FROM #TEMP
    

    输出:

    最后一列说明字符串中没有“分钟”的记录。让我知道这是否有效!

    【讨论】:

      【解决方案2】:

      在 excel 中,在时间列旁边添加三个空列。然后突出显示该列并选择“文本到列”选择“空格”作为分隔符。这将像这样分解数据(没有点,它们只是帮助格式化):

      A B C D 2 hours . . 3 hours . . 1 hour 15 minutes 2 hours 30 minutes

      每个都在自己的列中。

      然后在第五列中创建方程: =A1+C1/60

      将列格式化为您想要的小数位数,您将获得以下数据:

      E 2.00 3.00 1.25 2.50

      【讨论】:

      • 当有“30 分钟”时间字符串时这会中断
      • 不,如果您使用空格作为分隔符,则不会。在我拥有的第一个表中,它会将第三列 (C) 读取为零,并且不会在小数点后放置任何内容。
      【解决方案3】:

      从2 hours 30 minutes,您可以将小时数除以 60,如下所示:

      Sub TestMe()
      
          Dim myTime As String
      
          myTime = "2 hours 30 minutes"
          Debug.Print Round(Split(myTime)(0) + Split(myTime)(2) / 60, 2)
      
          myTime = "2 hours 35 minutes"
          Debug.Print Round(Split(myTime)(0) + Split(myTime)(2) / 60, 2)
      
      End Sub
      

      您甚至可以为此创建自定义函数:

      Public Function TimeToDouble(myTime As String) As Double
          TimeToDouble = Round(Split(myTime)(0) + Split(myTime)(2) / 60, 2)
      End Function
      

      【讨论】:

        【解决方案4】:

        保持简单。只需在 Excel 中执行以下公式:

        Minutes / 60 = Hours in Decimal
        

        示例:2 小时 30 分钟

        30 / 60 = 0.5  -> 2.5 hours
        

        示例 2:1 小时 15 分钟

        15 / 60 = 0.25  -> 1.25 hours
        

        如果只使用分钟:示例 3:150 分钟

        150 / 60 = 2.5 hours
        

        就这么简单 :) 希望这会有所帮助。

        【讨论】:

        • 您好 该字段是一个字符串,即“2 小时 30 分钟”,我需要使用公式或 SQL 将其转换为小数。执行您建议的方法涉及手动浏览每个字段并将其更改为小数点。我拥有的电子表格非常大,可以做这么多。
        猜你喜欢
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多