Как найти количество дней между двумя датами
У меня есть базовый запрос:
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