MySQL中的日期函数
1. 查看日期/时间
1.1 查看当前的日期/时间
(1)NOW():返回当前的日期时间;
(2)CURDATE():返回当前的日期;
(3)CURTIME():返回当前的时间;
SELECT NOW(),CURDATE(),CURTIME();

NOW()/CURDATE()/CURTIME()
1.2 提取指定的日期/时间成分
(1)YEAR():提取年份;
(2)MONTH():提取月份;
(3)DAY():提取天(号/日);
(4)HOUR():提取小时;
(5)MINUTE():提取分钟;
(6)SECOND():提取秒。
SELECT NOW(),YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());

YEAR()/MONTH()/DAY()/HOUR()/MINUTE()/SECOND()
(7)DAYNAME():返回传入日期对应的星期数;
(8)MONTHNAME():返回传入日期对应的字符串形式的月份。
SELECT NOW(),DAYNAME(NOW()),MONTHNAME(NOW());

DAYNAME()/MONTHNAME()
(1)—(6):返回的结果是整数型,(7)—(8):返回的结果是字符型。
关于提取指定的日期/时间成分,还有一个常见的函数,那就是EXTRACT()。
(9)EXTRACT(type from date/time)
SELECT NOW(),EXTRACT(HOUR FROM NOW());

EXTRACT()
2. 格式化日期/时间
(1)DATE_FORMAT(date, format):格式化日期
SELECT NOW(),DATE_FORMAT(NOW(), '%Y%m%d');
SELECT NOW(),DATE_FORMAT(NOW(), '%Y-%m-%d');
SELECT NOW(),DATE_FORMAT(NOW(), '%y-%m-%D');
SELECT NOW(),DATE_FORMAT(NOW(), '%M %D %Y');

DATE_FORMAT(date, '%Y%m%d')

DATE_FORMAT(date, '%Y-%m-%d')

DATE_FORMAT(date, '%y-%m-%D')

DATE_FORMAT(date, '%M %D %Y')
以2023年3月5日为例:%Y——2023,%y——23,%M——March,%m——03,%D——5th,%d——05。
(2)TIME_FORMAT(time, format):格式化时间
SELECT NOW(),TIME_FORMAT(NOW(), '%H:%i:%s');
SELECT NOW(),TIME_FORMAT(NOW(), '%h:%i:%s %p');

TIME_FORMAT(time, '%H:%i:%s')

TIME_FORMAT(time, '%h:%i:%s %p')
以20:56:30为例:%H——20,%h——08,%i——56,%s——30,%p——PM。
3. 计算日期/时间
(1)DATE_ADD(date, INTERVAL expr type)
SELECT NOW(),DATE_ADD(NOW(), INTERVAL 1 DAY); -- 当前日期 + 1天
SELECT NOW(),DATE_ADD(NOW(), INTERVAL -1 YEAR); -- 当前日期 - 1年
SELECT NOW(),DATE_ADD(NOW(), INTERVAL 1 HOUR); -- 当前日期 + 1小时

DATE_ADD(date, INTERVAL 1 DAY)

DATE_ADD(date, INTERVAL -1 YEAR)

DATE_ADD(date, INTERVAL 1 HOUR)
(2)DATE_SUB(date, INTERVAL expr type)
SELECT NOW(),DATE_SUB(NOW(), INTERVAL 1 YEAR); -- 当前日期 - 1年
SELECT NOW(),DATE_SUB(NOW(), INTERVAL -1 DAY); -- 当前日期 + 1天

DATE_SUB(date, INTERVAL 1 YEAR)

DATE_SUB(date, INTERVAL -1 DAY)
(3)DATEDIFF(expr, expr2):返回天数的间隔,不考虑时分秒,且为 expr - expr2
SELECT DATEDIFF('2023-3-5', '2023-2-5'); -- 28
SELECT DATEDIFF('2023-2-5', '2023-3-5'); -- -28

DATEDIFF('2023-3-5', '2023-2-5')

DATEDIFF('2023-2-5', '2023-3-5')
(4)TIME_TO_SEC(time):返回传入时刻与零点的秒数差,不考虑日期
SELECT TIME_TO_SEC('21:00'); -- 75600 = 21*3600
SELECT TIME_TO_SEC('21:00:02'); -- 75602 = 21*3600 + 2

TIME_TO_SEC('21:00')

TIME_TO_SEC('21:00:02')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通