@didxga: Осторожно: (конец - начало) НЕ возвращает разницу в секундах между значениями даты и времени. Он возвращает число, которое является разницей между десятичными числами, которые выглядят как ггггммддччммсс.
helloPiers
Ответы:
330
SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');-- result: 22:00:59, the difference in HH:MM:SS formatSELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');-- result: 79259 the difference in seconds
Таким образом, вы можете использовать TIMESTAMPDIFFдля своих целей.
Что именно означает «разница в секундах для дней»? Я не понимаю, почему умножение результата TIMEDIFFна 24*60*60не равно результату TIMESTAMPDIFF.
Дэвид Туит
Это решение сработало для меня! Но в моем случае я хотел бы выполнить TIMESTAMPDIFF в ДЕНЬ, но не учитывая выходные дни (сб / вс). Разница только в днях недели ... Возможно ли это простым способом? Если нет, то извиняюсь за неудобства, тогда я поищу другое решение. TKs.
Масса
8
TIMEDIFF в примере неверен, поскольку это не количество секунд между этими двумя днями. TIMEDIFF возвращает значение TIME, которое имеет разницу часов, минут и секунд. Умножение не даст полезного ответа. Используйте TIMESTAMPDIFF.
IvanD
4
Интересно, TIMEDIFF()что аргументы времени начала и окончания будут в порядке, противоположном ожидаемому TIMESTAMPDIFF().
Если вы работаете со столбцами DATE (или можете преобразовать их в столбцы даты), попробуйте DATEDIFF (), а затем умножьте на 24 часа, 60 минут и 60 секунд (поскольку DATEDIFF возвращает diff в днях). Из MySQL:
дорогой, это идеально подходит для вышеупомянутого вопроса, но я хочу некоторые модификации с тем же запросом, поэтому, пожалуйста, помогите мне, как это можно сделать. здесь я хочу сравнить конечный результат с моей ценностью, SELECT * FROM table where datediff(today,databasedate) as days =3;примерно так
Сурадж Аббаси
9
SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
calculates difference in hour.(for days--> you have to define day replacing hour
SELECT DATEDIFF('2012-2-2','2012-2-1')SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')
unix_timestamp - стандартный способ синхронизации в Unix-подобных системах. Представляет 32-разрядное целое число, указывающее, сколько секунд прошло с 01.01.1970 00:00:00. Т.е. нижний предел. Верхняя граница ограничена 2 106 в год, но из-за частых программ не работает с этим значением (вместо целого без знака, использующего целое число со знаком) считается верхним пределом в 2038 году.
G
+ при прохождении через DST неправильно вычитается / добавляется
TC хочет получить значение результата в секундах или миллисекундах.
Devid G
0
Эта функция берет разницу между двумя датами и показывает ее в формате даты гггг-мм-дд. Все, что вам нужно, это выполнить приведенный ниже код и затем использовать функцию. После выполнения вы можете использовать его следующим образом
Этот код вычисляет разницу между двумя датами в формате гггг ММ дд.
declare@StartDate datetime
declare@EndDate datetime
declare@years int
declare@months int
declare@days int
--NOTE: date of birth must be smaller than As on date, --else it could produce wrong resultsset@StartDate ='2013-12-30'--birthdateset@EndDate = Getdate()--current datetime--calculate yearsselect@years = datediff(year,@StartDate,@EndDate)--calculate months if it's value is negative then it --indicates after __ months; __ years will be complete--To resolve this, we have taken a flag @MonthOverflow...declare@monthOverflow int
select@monthOverflow =casewhen datediff(month,@StartDate,@EndDate)-( datediff(year,@StartDate,@EndDate)*12)<0then-1else1end--decrease year by 1 if months are Overflowedselect@Years =casewhen@monthOverflow <0then@years-1 else@years endselect@months = datediff(month,@StartDate,@EndDate)-(@years *12)--as we do for month overflow criteria for days and hours --& minutes logic will followed same waydeclare@LastdayOfMonth int
select@LastdayOfMonth = datepart(d,DATEADD
(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))select@days =casewhen@monthOverflow<0and
DAY(@StartDate)> DAY(@EndDate)then@LastdayOfMonth +(datepart(d,@EndDate)- datepart(d,@StartDate))-1else datepart(d,@EndDate)- datepart(d,@StartDate)endselect@Months=casewhen@days <0or DAY(@StartDate)> DAY(@EndDate)then@Months-1 else@Months endDeclare@lastdayAsOnDate int;set@lastdayAsOnDate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate),0)));Declare@lastdayBirthdate int;set@lastdayBirthdate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@StartDate)+1,0)));if(@Days <0)(select@Days =casewhen(@lastdayBirthdate >@lastdayAsOnDate)then@lastdayBirthdate +@Days
else@lastdayAsOnDate +@Days
end)printconvert(varchar,@years)+' year(s), '+convert(varchar,@months)+' month(s), '+convert(varchar,@days)+' day(s) '
Почему бы просто не использовать TIMESTAMPDIFFфункцию?
Codeforester,
0
Если у вас есть дата, хранящаяся в текстовом поле в виде строки, вы можете реализовать этот код, он будет извлекать список прошлых дней в неделю, месяц или год сортировки:
SELECT*FROM`table`WHERE STR_TO_DATE(mydate,'%d/%m/%Y')< CURDATE()- INTERVAL 30 DAY AND STR_TO_DATE(date,'%d/%m/%Y')> CURDATE()- INTERVAL 60 DAY
//This isfor a month
SELECT*FROM`table`WHERE STR_TO_DATE(mydate,'%d/%m/%Y')< CURDATE()- INTERVAL 7 DAY AND STR_TO_DATE(date,'%d/%m/%Y')> CURDATE()- INTERVAL 14 DAY
//This isfor a week
% d% m% Y - ваш формат даты
Этот запрос отображает запись между днями, которые вы установили там, например: ниже за последние 7 дней и выше за последние 14 дней, поэтому будет отображаться ваша последняя недельная запись, аналогичная понятию за месяц или год. Какое бы значение вы ни указали в приведенную ниже дату, например: ниже по сравнению с 7 днями, так что другое значение будет вдвое больше 14 дней. То, что мы говорим здесь, получит все записи выше за последние 14 дней и ниже за последние 7 дней. Это недельная запись, которую вы можете изменить на 30-60 дней в течение месяца, а также в течение года.
Осторожно: (конец - начало) НЕ возвращает разницу в секундах между значениями даты и времени. Он возвращает число, которое является разницей между десятичными числами, которые выглядят как ггггммддччммсс.
Это не возвращает разницу даты в секундах, вместо этого она возвращает разницу между десятичными числами, которые выглядят как ггггммдччммсс. Таким образом, это не решает вопрос ОП. То же самое упоминается и в комментарии к вопросу.
Ответы:
Таким образом, вы можете использовать
TIMESTAMPDIFF
для своих целей.источник
TIMEDIFF
на24*60*60
не равно результатуTIMESTAMPDIFF
.TIMEDIFF()
что аргументы времени начала и окончания будут в порядке, противоположном ожидаемомуTIMESTAMPDIFF()
.Если вы работаете со столбцами DATE (или можете преобразовать их в столбцы даты), попробуйте DATEDIFF (), а затем умножьте на 24 часа, 60 минут и 60 секунд (поскольку DATEDIFF возвращает diff в днях). Из MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
например:
источник
DATEDIFF
не возвращает дроби.Получите разницу дат в днях, используя DATEDIFF
ИЛИ
Обратитесь по ссылке ниже MySql разница между двумя временными метками в днях?
источник
SELECT * FROM table where datediff(today,databasedate) as days =3;
примерно такисточник
источник
Второй подход
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
источник
Или вы можете использовать функцию TIMEDIFF
источник
Эта функция берет разницу между двумя датами и показывает ее в формате даты гггг-мм-дд. Все, что вам нужно, это выполнить приведенный ниже код и затем использовать функцию. После выполнения вы можете использовать его следующим образом
источник
ОК, это не совсем то, что попросил ОП, но это то, что я хотел сделать :-)
источник
Этот код вычисляет разницу между двумя датами в формате гггг ММ дд.
источник
TIMESTAMPDIFF
функцию?Если у вас есть дата, хранящаяся в текстовом поле в виде строки, вы можете реализовать этот код, он будет извлекать список прошлых дней в неделю, месяц или год сортировки:
% d% m% Y - ваш формат даты
Этот запрос отображает запись между днями, которые вы установили там, например: ниже за последние 7 дней и выше за последние 14 дней, поэтому будет отображаться ваша последняя недельная запись, аналогичная понятию за месяц или год. Какое бы значение вы ни указали в приведенную ниже дату, например: ниже по сравнению с 7 днями, так что другое значение будет вдвое больше 14 дней. То, что мы говорим здесь, получит все записи выше за последние 14 дней и ниже за последние 7 дней. Это недельная запись, которую вы можете изменить на 30-60 дней в течение месяца, а также в течение года.
Спасибо, надеюсь, это кому-нибудь поможет.
источник
Вы бы просто сделали это:
источник
Почему не просто
Выберите сумму (Date1 - Date2) из таблицы
date1 и date2 являются datetime
источник