sql语句-希望从另一个日期中减去1个日期,并获取其间的天、小时和分钟
我想从另一个日期中减去一个日期,并得到这两个日期之间的天数、小时和分钟 我知道有一个DateDiff函数,但是它不适用于所有3个时间值;几天几小时几分钟。我希望这在SQL语句中是可行的。目前我有以下几点sql语句-希望从另一个日期中减去1个日期,并获取其间的天、小时和分钟,sql,sql-server,Sql,Sql Server,我想从另一个日期中减去一个日期,并得到这两个日期之间的天数、小时和分钟 我知道有一个DateDiff函数,但是它不适用于所有3个时间值;几天几小时几分钟。我希望这在SQL语句中是可行的。目前我有以下几点 SELECT id, pickupdateandtime, GETDATE() AS CurrentTime, (DATEDIFF(day,GETDATE(),pickupdateandtime)) AS Days, (DATEDIFF(hour,GETDATE(),pickupdatean
SELECT id, pickupdateandtime, GETDATE() AS CurrentTime,
(DATEDIFF(day,GETDATE(),pickupdateandtime)) AS Days,
(DATEDIFF(hour,GETDATE(),pickupdateandtime)) AS Hours,
(DATEDIFF(minute,GETDATE(),pickupdateandtime)) AS Mins FROM orders
结果是这样的:
如果我们可以将所有内容都放在一列中,那也没关系。您需要使用%
从小时中删除整天,从分钟中删除整小时
因此,您可以执行以下操作:
SELECT
id,
pickupdateandtime,
GETDATE() AS CurrentTime,
(DATEDIFF(day,GETDATE(),pickupdateandtime)) AS Days,
(DATEDIFF(hour,GETDATE(),pickupdateandtime) % 24) AS Hours,
(DATEDIFF(minute,GETDATE(),pickupdateandtime) % 60) AS Mins FROM orders
您需要使用%
从小时中删除整天,从分钟中删除整小时
因此,您可以执行以下操作:
SELECT
id,
pickupdateandtime,
GETDATE() AS CurrentTime,
(DATEDIFF(day,GETDATE(),pickupdateandtime)) AS Days,
(DATEDIFF(hour,GETDATE(),pickupdateandtime) % 24) AS Hours,
(DATEDIFF(minute,GETDATE(),pickupdateandtime) % 60) AS Mins FROM orders
我同意@AndyMcLaughlin在这里使用mod运算符
%
。这种东西很方便。然而,我对DATEDIFF
普遍不信任。该函数不计算两个日期之间的年数,而是计算它们之间的年边界数
因此DATEDIFF
“认为”2000年1月1日和2001年1月1日之间的年差与2000年12月31日和2001年1月1日之间的年差相同
这就是为什么@Michael认为需要从@AndyMcLaughlin的结果中减去1。不幸的是,这并不总是有效的,这将取决于具体情况
通常,DATEDIFF
在您感兴趣的最小间隔内使用时效果良好。所以,如果你对年份感兴趣,只想将一个日历年与另一个日历年分开,那么它会很好地为你服务
我想我们感兴趣的最小时间间隔是分钟。因此,我们可以使用DATEDIFF
,但必须从那里向上工作到数小时和数天:
select
mf.id,
mf.pickupdateandtime,
mf.CurrentTime,
--The divisions in the following lines simply
--truncate since all the numbers are integers
--but that works in our favour here
(mf.MinutesFull/(60*24)) as Days,
(mf.MinutesFull/60) % 24 as Hours,
mf.MinutesFull % 60 as Minutes
from
(
select
id,
pickupdateandtime,
getdate() as CurrentTime,
datediff(minute, getdate(), pickupdateandtime) as MinutesFull
from @orders
) mf
我同意@AndyMcLaughlin在这里使用mod运算符%
。这种东西很方便。然而,我对DATEDIFF
普遍不信任。该函数不计算两个日期之间的年数,而是计算它们之间的年边界数
因此DATEDIFF
“认为”2000年1月1日和2001年1月1日之间的年差与2000年12月31日和2001年1月1日之间的年差相同
这就是为什么@Michael认为需要从@AndyMcLaughlin的结果中减去1。不幸的是,这并不总是有效的,这将取决于具体情况
通常,DATEDIFF
在您感兴趣的最小间隔内使用时效果良好。所以,如果你对年份感兴趣,只想将一个日历年与另一个日历年分开,那么它会很好地为你服务
我想我们感兴趣的最小时间间隔是分钟。因此,我们可以使用DATEDIFF
,但必须从那里向上工作到数小时和数天:
select
mf.id,
mf.pickupdateandtime,
mf.CurrentTime,
--The divisions in the following lines simply
--truncate since all the numbers are integers
--but that works in our favour here
(mf.MinutesFull/(60*24)) as Days,
(mf.MinutesFull/60) % 24 as Hours,
mf.MinutesFull % 60 as Minutes
from
(
select
id,
pickupdateandtime,
getdate() as CurrentTime,
datediff(minute, getdate(), pickupdateandtime) as MinutesFull
from @orders
) mf
如果您的代码正常工作,那么您正在使用SQL Server。我做了适当的标记。如果你的代码有效,那么你正在使用SQL Server。我做了适当的标记,看起来不错。以前从未见过这个百分比,看起来像是其他种类的。也许我也需要减去1天tho,对吗?看起来不错。以前从未见过这个百分比,看起来像是其他种类的。也许我也需要减去1天tho,对吗?谢谢你提供的额外信息。今晚我要试试他的。我觉得我们很接近,但根据你的建议,我可能会达到100%。一切就绪。。谢谢你,史蒂夫,不用担心。我相信如果你认为一个新的答案更符合你的要求,你可以修改你接受的答案。谢谢你提供的额外信息。今晚我要试试他的。我觉得我们很接近,但根据你的建议,我可能会达到100%。一切就绪。。谢谢你,史蒂夫,不用担心。我相信如果你认为一个新的答案更符合你的要求,你可以修改你接受的答案。