MySQL怎样计算日期差值 DATEDIFF/TIMESTAMPDIFF函数实战

DATEDIFF只算天数差。
TIMESTAMPDIFF算小时秒。
2 02 4 年项目,算差值用TIMESTAMPDIFF。
WHERE子句不能用日期函数。
提前算好存起来。
用DATE()函数预处理。
大数据量用分布式数据库。
统计用户活跃天数,用DATEDIFF。
统计订单处理时间,用TIMESTAMPDIFF。
时区要统一,用UTC。
闰年要考虑。
空值用IFNULL()处理。
你自己掂量。

MySQL时间格式化函数解析 where查询中日期范围筛选技巧

核心就两点:别在WHERE用函数,用范围筛选。

DATE_FORMAT别用在WHERE。
上周刚处理一个,改用范围筛选秒秒搞定。

STR_TO_DATE非标日期转。
但存储别用字符串,直接存DATE/DATETIME。

范围筛选用>=和<。
比如查十月数据,>='2 02 3 -1 0-01 ' < '2 02 3 -1 1 -01 '。
这样直接用索引。

别用BETWEEN查边界。
会漏毫秒级数据。
比如查1 0月2 6 号,>='2 02 3 -1 0-2 6 ' < '2 02 3 -1 0-2 7 '。

时区统一用UTC存。
应用层转时区。
怎么转你看着办。

字符串和日期比,显式转。
用STR_TO_DATE('2 6 -1 0-2 02 3 ', '%d-%m-%Y')。

边界2 3 :5 9 :5 9 会漏毫秒。
改用< '2 02 3 -1 0-2 7 00:00:00'。

MONTH(order_time)=1 0这种会失效。
改用WHERE order_time >= '2 02 3 -1 0-01 ' AND order_time < '2 02 3 -1 1 -01 '。

DATEDIFF算日期差。
TIMEDIFF算时间差。

DATE_ADD加时间。
DATE_SUB减时间。

按月分组用YEAR(), MONTH()。
按周用WEEK()。
按季度用QUARTER()。

UNIX_TIMESTAMP转时间戳。
FROM_UNIXTIME转回日期。

总结就这些。
你自己看。

利用MySQL的DATE_FORMAT函数自定义日期和时间的显示格式

这MySQL的DATE_FORMAT函数,就是帮你把日期时间格式变花样的。
简单说,你给个日期,它帮你按你说的格式显示出来。
比如现在,你想看看今天的日期,直接写SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'),就出来2 02 3 -07 -1 5 这样的格式。

你要是想看年月日,年/月/日也行,格式就是%Y/%m/%d,出来的就是2 02 3 /07 /1 5 要全日期时间,年月日时分秒,用%H:%i:%s,比如2 02 3 -07 -1 5 1 2 :3 4 :5 6
月份名字也行,缩写是%b,全称是%M,比如现在是7 月,缩写就是Jul,全称就是July。

星期名字也行,%W就是星期几,现在是周六,就是Saturday。

要算时间差,用TIMEDIFF函数,比如你想知道现在和2 02 3 -07 -1 5 1 2 :00:00差多少时间,就写SELECT DATE_FORMAT(TIMEDIFF('2 02 3 -07 -1 5 1 2 :00:00', NOW()), '%H:%i:%s'),出来就是2 3 小时2 5 分钟4 秒。

注意,格式符大小写很重要,比如%m和%M不一样。
有些格式符还受地区设置影响,比如%W。

这函数好用,能帮你做日志记录、报表、用户界面展示,让数据看起来更清楚,代码也简洁。