Как найти количество дней между двумя датами

У меня есть базовый запрос:

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".

Может ли это быть выполнено в запросе?

Ответ 1

Вы использовали бы 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))

Ответ 2

Чтобы найти количество дней между двумя датами, вы используете:

DATEDIFF ( d, startdate , enddate )

Ответ 3

Я бы использовал функцию 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))

EDIT: ЕСЛИ с использованием MySQL вы опускаете 'd', оставляя вас с

DATEDIFF(dtLastUpdated, dtCreated) AS Difference

Ответ 4

Если вы используете 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))

Ответ 5

Получите Нет дней между двумя днями

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

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

Ответ 6

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

сделать это

Ответ 7

Функция 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

Ответ 8

Как уже упоминалось @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))

Ответ 9

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

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