收藏本页 | 设为主页 | RSS
LOGO

我就上乐乐吧

在MySQL中,经常要比较两个日期,就需要使用函数TIMESTAMPDIFF。

您当前的位置:首页 » 技术杂萃
全站公告
重要提示!

本站收集各类美图,以无LOGO原汁原味图为主!欢迎大家交流。
怕失联,请认准如下地址:
微博:传送门
土豆:传送门
电报:传送门
微信:superimagelove
花瓣:传送门
Q群1:231151757
Q群2:583138281
文件解压密码:593668.com
热心赞助

站内搜索
 
相关文章
热门文章
热搜词组
文章归档
友情链接
MySQL的TIMESTAMPDIFF函数神奇之处

发布日期:2019-12-27  关键词: MySQL

在MySQL中,经常要比较两个日期,就需要使用函数TIMESTAMPDIFF。

语法:
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。

说明:
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the之间的整数差值。其单位由interval参数给出,必须是以下值的其中一个:
FRAC_SECOND表示间隔是毫秒,SECOND秒,MINUTE分钟,HOUR小时,DAY天,WEEK星期,MONTH月,QUARTER季度,YEAR年

在大部分的应用中,比较多的可能是判断,SECOND秒,MINUTE分钟,HOUR小时,DAY天,这种情况下一般并不会出现什么问题,但是如果是判断其它计量单位,就可能存在一定的问题了。

就比如如下的语句:

SELECT TIMESTAMPDIFF(MONTH,'2019-11-30','2019-12-01')

一般的想法是这个语句应该返回1,但是这函数的比较结果很坑,是0。

是不是有种风中凌乱的感觉,这个也能算一个月吗?那么我们再来试下,QUARTER,一样瞎了眼,还是0。

SELECT TIMESTAMPDIFF(QUARTER,'2019-9-10','2019-12-01')

用年呢?同样是一样的结果:

SELECT TIMESTAMPDIFF(YEAR,'2018-12-10','2019-12-01')

那么再来试周这个计量单位,结果是0。

SELECT TIMESTAMPDIFF(WEEK,'2019-12-10','2019-12-16')

对比下日历:

MySQL的TIMESTAMPDIFF函数神奇之处,MySQL,技术杂萃

有人说是没有加上时间,好吧,再加上时间来看下。

SELECT TIMESTAMPDIFF(WEEK,'2019-12-10 00:01:00','2019-12-16 00:00:10')

结果还是0.这是个什么鬼,明明不属同一周,居然也能算是本周内,反复思量下,估计TIMESTAMPDIFF这个函数判断天以上单位,就是按天来的,如果不超过7天,算一周内,不超过30天算一个月,不超过30天算一个季度,不超过365天算一个年内。

这样的逻辑会让很多程序员写着写着就哭出来好不?还可以这样的来判断的,算不算神逻辑。好吧,服了,以后判断月,还是改成如下的写法吧。

DATE_FORMAT( 日期1, '%Y%m' ) = DATE_FORMAT( 日期2, '%Y%m' )

不然的话,说不定那天按月统计就出BUG了,得哭晕在墙角了。
猜您喜欢:
Q群: 231151757微信:superimagelove 官网:www.593668.com