起因
业务中需要比对两个日期的时间是否相等(例如 2017-07-06 20:00:00 与 2017-07-06 20:00:30 截取到分),出于好奇,想在 MySQL 中查询语句做判断。一搜,据各路大侠说在数据库中做判断比在 Java 中做判断性能高,遂查找方法。
插曲
由于基础不扎实,从 w3school 看到 SQL 的函数 datediff(date1,date2)与datediff(minute,date1,date2),遂填参数测之,前者OK,后者GG,也不明原因,弃之。
正题
后找到 TIMESTAMPDIFF(unit,date1,date2) 函数,先入为主地认为它的工作方式是如前例截取数据到分(2017-07-06 20:00)再比较,但使用之后发现在 2017-07-06 20:00 与 2017-07-06 20:01 的比较中竟然返回0 (TIMESTAMPDIFF(MINUTE,'2017-07-06 20:00:xx','2017-07-06 20:01:yy') = 0 )
于是就用 GUI 去测试了,测完之后发现自己原来想是错的,0.0
它并不是通过截取到分之后再判断两个值是否相等,而是算两个日期间隔的秒数是否小于一分钟:
TIMESTAMPDIFF(MINUTE,'2017-07-06 20:00:30','2017-07-06 20:01:00') = 0 --- 间隔30秒
TIMESTAMPDIFF(MINUTE,'2017-07-06 20:00:30','2017-07-06 20:01:30') = 1 --- 间隔60秒
TIMESTAMPDIFF(MINUTE,'2017-07-06 20:00:30','2017-07-06 19:59:31') = 0 --- 间隔59秒
TIMESTAMPDIFF(MINUTE,'2017-07-06 20:00:30','2017-07-06 19:59:30') = 1 --- 间隔60秒
总结
干啥事都有先入为主的思想,但遇到事实与所想不一样,多试验探究事物的原理才是正途。加油。