MySQL 中的日期函数是专门处理 DATE(日期)、DATETIME(日期时间)、TIMESTAMP(时间戳)等日期时间类型数据的工具,常用于获取当前时间、提取年月日时分秒、计算日期差值、格式化日期等场景(比如处理订单创建时间、用户注册时间、生日计算等)。我们对于表中的函数进行举例,看看它们在sql语句中是怎么发挥作用的:-- 提取当前日期的“年”部分SELECT YEAR(NOW()) FROM DUAL;-- 提取当前日期的“日”部分SELECT DAY(NOW()) FROM DUAL;-- 提取指定日期的“月”部分SELECT MONTH('2013-11-10') FROM DUAL;-- unix_timestamp():返回的是1970-1-1 到现在的秒数SELECT UNIX_TIMESTAMP() FROM DUAL;-- FROM_UNIXTIME():可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期-- %Y-%m-%d 格式是规定好的,表示年月日SELECT FROM_UNIXTIME(1618483484, '%Y-%m-%d') FROM DUAL;SELECT FROM_UNIXTIME(1618483100, '%Y-%m-%d %H:%i:%s') FROM DUAL;
-- 显示所有留言信息,发布日期只显示日期,不用显示时间SELECT id, content, DATE(send_time) FROM mes;
-- 请查询在10分钟内发布的帖子SELECT * FROM mesWHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) >= NOW();
-- 请在mysql 的sql语句中求出2011-11-11 和 1990-1-1 相差多少SELECT DATEDIFF('2011-11-11', '1990-01-01') FROM DUAL;
-- 请用mysql 的sql语句求出你活了多少天?SELECT DATEDIFF(NOW(), '2001-05-01') FROM DUAL;
-- 如果你能活80岁,求出你还能活多少天SELECT DATEDIFF(DATE_ADD('2001-05-01', INTERVAL 80 YEAR), NOW())FROM DUAL;
- DATE_ADD() 和 DATE_SUB() 函数中的 interval 后面可以是 year、hour、minute、second、day 等;
- DATEDIFF(date1, date2) 得到的是天数,而且是 date1 - date2 的天数,因此可以取负数
其实与DATEDIFF(date1, date2) 类似,还有一个函数,不同的是这个函数可以指定返回的单位 TIMESTAMPDIFF(YEAR, birthday, NOW())-- 计算用户年龄(按生日)SELECT name, TIMESTAMPDIFF(YEAR, birthday, NOW()) AS age FROM users;-- 计算订单下单到支付的时长(分钟)SELECT order_no, TIMESTAMPDIFF(MINUTE, create_time, pay_time) AS pay_minutes FROM orders;
最后,我们通过下面的语句,可以取出一个时期时间的年|月|日SELECT YEAR(NOW()) FROM DUAL;SELECT MONTH(NOW()) FROM DUAL;SELECT DAY(NOW()) FROM DUAL;SELECT MONTH('2013-11-10') FROM DUAL;