Sql server 我想计算starttime=23:30和endtime=00:15之间的时间差时间差时间差即将到来-23.25
我想计算时间差:Sql server 我想计算starttime=23:30和endtime=00:15之间的时间差时间差时间差即将到来-23.25,sql-server,Sql Server,我想计算时间差: start_time = 23:30 Finish_time = 00:15 时间差是-23.15,而不是45分钟 我的代码: DATEDIFF(minute, Start_Time, Finish_Time) 由于数据类型为Time,Sql server无法知道您的意思是开始时间和结束时间在不同的日期。 以下是解决此问题的一种方法: SELECT CASE WHEN Start_Time > Finish_Time THEN DATEDI
start_time = 23:30
Finish_time = 00:15
时间差是-23.15,而不是45分钟
我的代码:
DATEDIFF(minute, Start_Time, Finish_Time)
由于数据类型为
Time
,Sql server无法知道您的意思是开始时间和结束时间在不同的日期。以下是解决此问题的一种方法:
SELECT CASE WHEN Start_Time > Finish_Time THEN
DATEDIFF(minute, CAST(Start_Time As datetime), DATEADD(DAY, 1, CAST(Finish_Time As datetime)))
ELSE
DATEDIFF(minute, Start_Time, Finish_Time)
END
FROM @T
如果您希望将结果返回为时间
,则可以执行以下操作:
SELECT CASE WHEN Start_Time > Finish_Time THEN
CAST(DATEADD(DAY, 1, CAST(Finish_Time As datetime)) - CAST(Start_Time As datetime) as time)
ELSE
CAST(CAST(Finish_Time As datetime) - CAST(Start_Time As datetime) as time)
END
FROM @T
这里有一种方法可以获取十进制值,其中小数点的右侧是小时,左侧是分钟:
SELECT CAST(
REPLACE(
CONVERT (char(5),
CASE WHEN Start_Time > Finish_Time THEN
CAST(DATEADD(DAY, 1, CAST(Finish_Time As datetime)) - CAST(Start_Time As datetime) as time)
ELSE
CAST(CAST(Finish_Time As datetime) - CAST(Start_Time As datetime) as time)
END
, 114)
, ':', '.')
as decimal(4,2))
FROM @T
上次编辑:
;WITH CTE AS
(
SELECT CASE WHEN Start_Time > Finish_Time THEN
DATEDIFF(minute, CAST(Start_Time As datetime), DATEADD(DAY, 1, CAST(Finish_Time As datetime)))
ELSE
DATEDIFF(minute, Start_Time, Finish_Time)
END As DiffInMinutes
FROM @T
)
SELECT ((DiffInMinutes - (DiffInMinutes % 60)) / 60) + CAST((DiffInMinutes % 60) as float) / 60 As DiffAsDecimalHours
FROM CTE
谢谢你的帮助。我用第一种方法来解决我的问题。但它将值显示为整数。我试图将此列转换为带小数点后两位的浮点形式,但给出了一些错误。你能告诉我如何把它转换成小数点后两位的浮点吗。谢谢!那么您希望结果为
00.45
?你确实意识到这与00:45
不一样,对吗?@DineshGuleria——存储“十进制时间”几乎总是回来咬人——通常是在他们已经做了一些不适当的事情(例如将两个这样的值加在一起)并期望能够以某种方式神奇地修复它之后。@Damien_我完全同意不相信的人,因此,我在编辑之前发表了评论。嗨,佐哈尔!谢谢你的及时回复。我想以小时为单位转换Chargeabe_时间列中的数据。所以现在是04:30:00,但我希望看到这是4.5小时。如果你能帮我修改这个专栏,非常感谢