如何计算两个日期之间的天数

18

我有一个基本的查询:

SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit
FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102))
我想在输出结果中添加另一列... 叫做“Difference”,以查找“dtcreated”和“dtlastupdated”之间的天数。例如,如果记录1的dtcreated是1/1/11,而dtlastupdated是1/1/12,“Difference”列将为“365”。这可以在查询中完成吗?

2
在谷歌上搜索“如何查询两个日期之间的天数”会找到很多答案。这是你应该首先尝试的方法。 - Jeremy Holovacs
3
@Jeremy,这里有个答案不错吧?实际上是通过谷歌找到这里的。 - Adrian Mouat
@AdrianMouat 请记住,这是在问题提出一年多之后。StackOverflow在Google上享有更高的排名搜索结果,因此这是一个自然的结果...无论是否必要。 - Jeremy Holovacs
10个回答

41
你可以使用DATEDIFF函数:
declare @start datetime
declare @end datetime

set @start = '2011-01-01'
set @end = '2012-01-01'

select DATEDIFF(d, @start, @end)

results = 365

所以针对您的查询:

SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit
    , DATEDIFF(d, dtCreated, dtLastUpdated) as Difference
FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102))

我在这里遇到了一个错误... SQL 执行错误,将字符转换为日期时间时转换失败。 - Shmewnix
@Shmewnix,dtCreateddtLastUpdated的数据类型是什么?如果它们不是日期时间类型,那么您需要进行转换。 - Taryn
你会在哪里进行转换?在select语句中还是在datediff语句中? - Shmewnix
您需要在 datediff 语句中进行转换。 - Taryn
你可以使用 datediff(d, cast(dtcreated as datetime), cast(dtlastupdated as datetime))。 - Taryn
显示剩余3条评论

10

要在两个日期之间找到天数,您可以使用:

DATEDIFF ( d, startdate , enddate )

2
我会使用DATE_DIFF函数来提供下面的值:
SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit
    , DATEDIFF(d, dtLastUpdated, dtCreated) AS Difference
FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102))

编辑:如果使用MySQL,则省略'd',只留下

DATEDIFF(dtLastUpdated, dtCreated) AS Difference

1
DATEDIFF(d, 'Start Date', 'End Date')

做它。

1
如果您正在使用MySQL,那么有一个DATEDIFF函数可以计算两个日期之间的天数:
SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit
    , DATEDIFF(dtLastUpdated, dtCreated) as Difference
FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102))

0

DATEDIFF 函数用于计算所需日期之间的天数。

例如,如果您要从给定的字符串格式日期中计算当前日期的差异:

SELECT * , DATEDIFF(CURDATE(),STR_TO_DATE('01/11/2017', '%m/%d/%Y')) AS days FROM consignments WHERE code = '1610000154'

在编程中,STR_TO_DATE()函数可以将字符串转换为指定格式的日期。
例如:
SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit
    , DATEDIFF(dtLastUpdated, dtCreated) as Difference
FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > '2012-01-01 00:00:00')

已在 MySQL 服务器 5.7.17 上进行测试


0
DATEDIFF('Start Date', 'End Date')

在MySQL中,这给了我天数的差异。

0

正如@Forte L.所提到的,您也可以采取以下措施;

SELECT dtCreated
    , bActive
    , dtLastPaymentAttempt
    , dtLastUpdated
    , dtLastVisit

    , DATEDIFF(day, dtCreated, dtLastUpdated) Difference

FROM Customers
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102))

0
DECLARE @Firstdate DATE='2016-04-01',
 @LastDate DATE=GETDATE(),/*get today date*/
 @resultDay int=null

SET @resultDay=(SELECT DATEDIFF(d, @Firstdate, @LastDate))
PRINT @resultDay

0

获取两个日期之间的天数

DECLARE @date1 DATE='2015-01-01',
 @date2 DATE='2019-01-01',
 @Total int=null

SET @Total=(SELECT DATEDIFF(DAY, @date1, @date2))
PRINT @Total

太好了,这对我真的很有帮助。 - Code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接