1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MySQL日期差 时间差 使用DATEDIFF TIMESTAMPDIFF函数

MySQL日期差 时间差 使用DATEDIFF TIMESTAMPDIFF函数

时间:2018-11-04 10:52:08

相关推荐

MySQL日期差 时间差 使用DATEDIFF TIMESTAMPDIFF函数

目录

DATEDIFFTIMESTAMPDIFF

DATEDIFF

需求:查询截至于7月15号的前10天的用户订单记录(不包括15号)

像这种对于一个具体日期往前或者往后推多少多少天的sql查询,我们一般能想到的可能是用具体的一个临界日期来设置条件:

.7.15号的前10天就是.7.5号,然后sql可以这么写:

select * from userOrder where bugDate > '-07-05' and bugDate < '-07-15'# 或者用between and 也可以

这样也是可行的,但是呢,需要自己演推出10天前的具体日期,但是实际的开发中往往是动态的,不仅仅只要7.15号的前10天,还有可能是其他日子,7.16前10天,7.30前10天·······

那就需要用上MySQL一个函数-------DATEDIFF

语法格式:里面就两个参数,都是放的时间,然后它会算出两个时间差

# 语法格式DATEDIFF('-6-22','-6-28')举个例子: 一正一反SELECT DATEDIFF('-6-22','-6-20') AS DiffDate from dualSELECT DATEDIFF('-6-20','-6-22') AS DiffDate from dual

仔细观察这两副图:左大右小是正数,左小右大是负数,然后那个问题就可以用这个函数解决了:

## 查询截至于7月15号的前10天的用户订单记录(不包括15号)select * from userOrder where DATEDIFF(bugDate,'-07-15') < 4 and ('-07-15',bugDate) >0

重点!重点!重点!!!!

很多人会漏了一个小细节------------------------------>>>>>>>>>>>>>>>>

这里提一句,为什么还要加一个大于0的条件:因为 左小右大是负数 比如-07-16 是小于0的,如果没加它也会查出来,在顺带说一句,datediff函数,返回值是相差的天数,不能定位到小时、分钟和秒。

要是暂时没理解,建议自己去数据库造数据查一遍就很块理解了

TIMESTAMPDIFF

需求:(是上一个DATEDIFF的需求升级版)

查询截至于7月15号的前2年的用户订单记录(不包括15号)

这个需求升级的地方在于时间范围的计量单位变了,若是用原先的做法也不是不可以,算一下2年有多少天,然后照样用datediff做,但是应该都不会这样去玩吧,所以TIMESTAMPDIFF函数了解一下,可以说是上一个的升级版。

**语法格式:**里面三个参数,一个计量单位(年、月、日·····),一个时间、一个时间

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)MICROSECOND 微秒SECOND 秒MINUTE 分钟HOUR 小时DAY 天WEEK 周MONTH 月份QUARTER YEAR 年份

直接上例子:

SELECT TIMESTAMPDIFF(MONTH, '-10-04' , '-12-04') a ,TIMESTAMPDIFF(MONTH, '-10-05' , '-12-04') b from dual

参数是MONTH,计算两个时间相差多少个月,注意它算的是满月,如上图,结束时间都是4号,但是开始时间一个是4号一个是5号,结果是不一样的,但是如果你是2个月多6天7天,它结果还是算2个月的,所以它只算满月。

说一个实用的,我们可以用year参数来算自己的岁数:

SELECT TIMESTAMPDIFF(YEAR, '2000-9-27' , now()) age from dual;

如果碰上需要时分秒,也可以加上,像这样:

SELECT TIMESTAMPDIFF(MINUTE , '2000-9-27 05:33:00' , '2000-9-27 05:43:00') age from dual;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。