SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');
-- result: 22:00:59, the difference in HH:MM:SS format
SELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');
-- result: 79259 the difference in seconds
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')
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 results
set @StartDate = '2013-12-30' --birthdate
set @EndDate = Getdate() --current datetime
--calculate years
select @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 = case when datediff(month,@StartDate,@EndDate) -
( datediff(year,@StartDate,@EndDate) * 12) <0 then -1 else 1 end
--decrease year by 1 if months are Overflowed
select @Years = case when @monthOverflow < 0 then @years-1 else @years end
select @months = datediff(month,@StartDate,@EndDate) - (@years * 12)
--as we do for month overflow criteria for days and hours
--& minutes logic will followed same way
declare @LastdayOfMonth int
select @LastdayOfMonth = datepart(d,DATEADD
(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))
select @days = case when @monthOverflow<0 and
DAY(@StartDate)> DAY(@EndDate)
then @LastdayOfMonth +
(datepart(d,@EndDate) - datepart(d,@StartDate) ) - 1
else datepart(d,@EndDate) - datepart(d,@StartDate) end
select
@Months=case when @days < 0 or DAY(@StartDate)> DAY(@EndDate) then @Months-1 else @Months end
Declare @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 = case when( @lastdayBirthdate > @lastdayAsOnDate) then
@lastdayBirthdate + @Days
else
@lastdayAsOnDate + @Days
end
)
print convert(varchar,@years) + ' year(s), ' +
convert(varchar,@months) + ' month(s), ' +
convert(varchar,@days) + ' day(s) '
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 is for 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 is for a week
%d%m%Y是您的日期格式
此查询显示您在此处设置的日期之间的记录,例如:从最近7天开始,在过去14天以上,因此您的上周记录显示相同的概念是月份或年份 . 无论您在下面的日期提供的 Value 如下:7天以下,其他 Value 将是14天的两倍 . 我们在这里说的是从过去7天以来的所有记录中获取的所有记录 . 这是一周记录,您可以将值更改为30-60天,一个月和一年 .
谢谢你希望它会帮助别人 .
271
你只需要这样做:
SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
13 回答
或者,您可以使用TIMEDIFF功能
第二种方法
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
因此,您可以将
TIMESTAMPDIFF
用于您的目的 .如果您正在使用DATE列(或者可以将它们转换为日期列),请尝试DATEDIFF(),然后乘以24小时,60分钟,60秒(因为DATEDIFF以天为单位返回diff) . 来自MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
例如:
使用DATEDIFF获取日期差异
OR
请参阅以下链接MySql difference between two timestamps in days?
此函数获取两个日期之间的差异,并以日期格式yyyy-mm-dd显示 . 您只需要执行下面的代码然后使用该功能 . 执行后你可以像这样使用它
好吧,这不是OP所要求的,但这是我想要做的:-)
此代码以yyyy MM dd格式计算两个日期之间的差异 .
如果您将日期存储在文本字段中作为字符串,则可以实现此代码,它将获取一周,一个月或一年排序的过去天数列表:
%d%m%Y是您的日期格式
此查询显示您在此处设置的日期之间的记录,例如:从最近7天开始,在过去14天以上,因此您的上周记录显示相同的概念是月份或年份 . 无论您在下面的日期提供的 Value 如下:7天以下,其他 Value 将是14天的两倍 . 我们在这里说的是从过去7天以来的所有记录中获取的所有记录 . 这是一周记录,您可以将值更改为30-60天,一个月和一年 .
谢谢你希望它会帮助别人 .
你只需要这样做:
为什么不呢
从表中选择Sum(Date1 - Date2)
date1和date2是datetime