【发布时间】:2018-09-28 09:34:15
【问题描述】:
在 Excel 或 SQL 中,如何将时间字符串(例如 2 小时 30 分钟)转换为小数,使其显示为 2.5 小时?这是在 Excel 电子表格中,因此有多个值,其中还包括:2 小时、3 小时、1 小时 15 分钟。是否可以使用公式或 SQL 查询更改所有值?
【问题讨论】:
标签: sql excel string time decimal
在 Excel 或 SQL 中,如何将时间字符串(例如 2 小时 30 分钟)转换为小数,使其显示为 2.5 小时?这是在 Excel 电子表格中,因此有多个值,其中还包括:2 小时、3 小时、1 小时 15 分钟。是否可以使用公式或 SQL 查询更改所有值?
【问题讨论】:
标签: sql excel string time decimal
我不确定您的字符串是否可以预测,但我尝试了一个分步脚本来组合几个值。您可以使用 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
最后一列说明字符串中没有“分钟”的记录。让我知道这是否有效!
【讨论】:
在 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
【讨论】:
从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
【讨论】:
保持简单。只需在 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
就这么简单 :) 希望这会有所帮助。
【讨论】: