gpt4 book ai didi

SQL:让 DATEDIFF 不返回负值

转载 作者:行者123 更新时间:2023-12-01 12:02:03 24 4
gpt4 key购买 nike

我有一个查询,我在其中提取可执行文件的运行时。数据库包含它的开始时间和结束时间。我想获得运行的总时间。到目前为止,我有:

SELECT startTime, endTime,
cast(datediff(hh,starttime,endtime) as varchar)
+':'
+cast(datediff(mi,starttime,endtime)-60*datediff(hh,starttime,endtime) as varchar) AS RUNTIME
FROM applog
WHERE runID = 33871
ORDER BY startTime DESC

当我执行此操作时,我得到了预期值和一些意外值。例如,如果开始时间 = 2008-11-02 15:59:59.790 并且结束时间 = 2008-11-02 19:05:41.857,则运行时间 = 4:-54。对于这种情况,如何在 MS SQL SMS 中获取查询以返回值 3:06?

谢谢。

我选择的 Eoin Campbell 作为答案最能满足我的需求。 David B 的也是可行的。

最佳答案

试试这些

假设有 2 个声明日期。

declare @start datetime
set @start = '2008-11-02 15:59:59.790'

declare @end datetime
set @end = '2008-11-02 19:05:41.857'

这将返回小时/分钟/秒

select 
(datediff(ss, @start, @end) / 3600),
(datediff(ss, @start, @end) / 60) % 60,
(datediff(ss, @start, @end) % 60) % 60

--returns

----------- ----------- -----------
3 5 42

这是零填充的连接字符串版本

select
RIGHT('0' + CONVERT(nvarchar, (datediff(ss, @start, @end) / 3600)), 2) + ':' +
RIGHT('0' + CONVERT(nvarchar, (datediff(ss, @start, @end) / 60) % 60), 2) + ':' +
RIGHT('0' + CONVERT(nvarchar, (datediff(ss, @start, @end) % 60) % 60), 2)

--------
03:05:42

关于SQL:让 DATEDIFF 不返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com