Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我想计算starttime=23:30和endtime=00:15之间的时间差时间差时间差即将到来-23.25_Sql Server - Fatal编程技术网

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小时。如果你能帮我修改这个专栏,非常感谢