如何查找两个日期之间的天数

时间:2012-07-10 17:17:02

标签: sql sql-server

我有一个基本查询:

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

我想在输出中添加另一列...让我们称之为“差异”以找出'dtcreated'和'dtlastupdated'之间的天数所以例如如果记录1的dtcreated为1/1 / 11和dtlastupdated是1/1/12,“差异”列将是“365”。

这可以在查询中完成吗?

9 个答案:

答案 0 :(得分:28)

您可以使用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))

答案 1 :(得分:5)

要查找两个日期之间的天数,请使用:

DATEDIFF ( d, startdate , enddate )

答案 2 :(得分: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

答案 3 :(得分: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))

答案 4 :(得分:0)

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

做到这一点

答案 5 :(得分: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上测试

答案 6 :(得分: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))

答案 7 :(得分:0)

from odoo.addons.web.controllers.main import Database  # importing base controller class

class MyDatabase(Database):
    def _render_template(self, **d):
       d.setdefault('manage',True)
       d['insecure'] = odoo.tools.config.verify_admin_password('admin')
       d['list_db'] = odoo.tools.config['list_db']
       d['langs'] = odoo.service.db.exp_list_lang()
       d['countries'] = odoo.service.db.exp_list_countries()
       d['pattern'] = DBNAME_PATTERN
       #additional parameters if any
       d['databases'] = []
       try:
           d['databases'] = http.db_list()
           d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases'])
       except odoo.exceptions.AccessDenied:
           monodb = db_monodb()
           if monodb:
               d['databases'] = [monodb]

       return env.get_template("your_modified_template.html").render(d)  #render your modified html template.

答案 8 :(得分:0)

两天之内没有天

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

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