将分钟添加到当前日期并创建一个新行,溢出时间超过几分钟

时间:2018-05-16 05:37:20

标签: sql-server

C1 | Start_Time      | Minutes
---+-----------------+---------
I1 | 8/6/17 23:50 PM |  40

我正在使用SQL Server,这就是我的表格。 Start_Time机器'8/6/17 23:50 PM'继续运行40分钟。当机器停止时,它将是第二天。在这种情况下,结束时间为8/7/17。现在我需要将溢出物随着时间的推移分开,并将第二天作为新条目。

结果应该像

C1  |   Time            | Minutes
----+-------------------+---------
I1  |   8/6/17 11:50 PM |  10
I1  |   8/7/17 12:00 AM |  30

日期和分钟必须分成不同的行。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用插入查询来检查当天Minutes与给定Start_Time的剩余分钟之间的差异是否大于零。如果是这样,那么请插入具有该差异的插入。

INSERT INTO yourTable (C1, Start_Time, Minutes)
SELECT
    C1,
    DATEADD(d, 1, DATEDIFF(d, 0, Start_Time)),
    Minutes - DATEDIFF(mi, Start_Time, DATEADD(d, 1, DATEDIFF(d, 0, Start_Time)))
FROM yourTable
WHERE
    Minutes - DATEDIFF(mi, Start_Time, DATEADD(d, 1, DATEDIFF(d, 0, Start_Time))) > 0;

按照以下链接进行演示,演示插入逻辑是否正常工作。

Demo

修改

我刚刚意识到您还需要一个更新查询来调整受上述插入影响的每条记录的剩余分钟数。你可以用这个:

UPDATE yourTable
SET Minutes = DATEDIFF(mi, Start_Time, DATEADD(d, 1, DATEDIFF(d, 0, Start_Time)))
WHERE
    Minutes - DATEDIFF(mi, Start_Time, DATEADD(d, 1, DATEDIFF(d, 0, Start_Time))) > 0;