> 技术文档 > mysql时间处理函数和操作笔记

mysql时间处理函数和操作笔记


前言

写sql时经常用到时间处理函数,我整理了一份mysql的常用sql笔记,供大家参考。
如果对你有帮助,请点赞支持~ 多谢🙏

笔记

-- MySQL 时间处理函数和操作符笔记-- 1. 获取当前日期和时间-- NOW(), SYSDATE(), CURRENT_TIMESTAMP(), CURDATE(), CURTIME()SELECT NOW();  -- 当前日期和时间(函数执行时)SELECT SYSDATE();  -- 当前日期和时间(语句执行时,与NOW()不同)SELECT CURRENT_TIMESTAMP(); -- 同NOW()SELECT CURDATE();  -- 当前日期(不带时间)SELECT CURTIME();  -- 当前时间(不带日期)-- 2. 时间类型转换-- DATE(), TIME(), DATETIME(), STR_TO_DATE(), DATE_FORMAT()SELECT DATE(\'2023-01-01 12:00:00\'); -- 提取日期部分SELECT TIME(\'2023-01-01 12:00:00\'); -- 提取时间部分SELECT STR_TO_DATE(\'01,01,2023\', \'%d,%m,%Y\'); -- 字符串转日期SELECT DATE_FORMAT(NOW(), \'%Y-%m-%d %H:%i:%s\'); -- 格式化输出-- 3. 提取时间部分-- YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()SELECT YEAR(NOW()); -- 提取年份SELECT MONTH(NOW()); -- 提取月份SELECT DAY(NOW());  -- 提取日SELECT HOUR(NOW()); -- 提取小时SELECT MINUTE(NOW());  -- 提取分钟SELECT SECOND(NOW());  -- 提取秒数-- 4. 时间运算-- DATE_ADD(), DATE_SUB(), + INTERVAL, - INTERVALSELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY); -- 加1天SELECT DATE_SUB(CURDATE(), INTERVAL 1 MONTH); -- 减1个月SELECT CURDATE() + INTERVAL 2 HOUR; -- 加2小时SELECT NOW() - INTERVAL 30 MINUTE; -- 减30分钟-- 5. 时间差计算-- DATEDIFF(), TIMEDIFF(), TIMESTAMPDIFF()SELECT DATEDIFF(\'2023-01-10\', \'2023-01-01\'); -- 日期差(天)SELECT TIMEDIFF(\'12:00:00\', \'08:30:00\'); -- 时间差(HH:MM:SS)SELECT TIMESTAMPDIFF(HOUR, \'2023-01-01\', \'2023-01-02\'); -- 指定单位差值-- 6. 时间截断-- DATE(), TIME(), EXTRACT(), TIMESTAMP()SELECT DATE(NOW());  -- 截断为日期SELECT TIME(NOW());  -- 截断为时间SELECT EXTRACT(YEAR_MONTH FROM NOW()); -- 提取年月SELECT TIMESTAMP(NOW()); -- 转换为时间戳-- 7. 时间格式化-- DATE_FORMAT() 模式SELECT DATE_FORMAT(NOW(), \'%Y-%m-%d\'); -- 2023-01-01SELECT DATE_FORMAT(NOW(), \'%Y年%m月%d日\'); -- 2023年01月01日SELECT DATE_FORMAT(NOW(), \'%H:%i:%s\'); -- 14:30:45SELECT DATE_FORMAT(NOW(), \'%W, %M %d %Y\'); -- 星期几, 月名 日 年-- 8. 生成时间序列-- 使用递归CTE或辅助表(MySQL 8.0+)WITH RECURSIVE date_series AS ( SELECT \'2023-01-01\' AS date UNION ALL SELECT date + INTERVAL 1 DAY FROM date_series WHERE date < \'2023-01-10\')SELECT * FROM date_series;-- 9. 时间比较-- 常规比较操作符(>, =, <=)SELECT CURDATE() > \'2023-01-01\'; -- 日期比较SELECT NOW() BETWEEN \'2023-01-01\' AND \'2023-12-31\'; -- 范围比较-- 10. 特殊时间值-- UNIX_TIMESTAMP(), FROM_UNIXTIME()SELECT UNIX_TIMESTAMP(); -- 当前UNIX时间戳SELECT UNIX_TIMESTAMP(\'2023-01-01\'); -- 指定日期时间戳SELECT FROM_UNIXTIME(1672531200); -- 时间戳转日期时间-- 11. 时间函数-- LAST_DAY(), MAKEDATE(), MAKETIME(), PERIOD_ADD()SELECT LAST_DAY(\'2023-02-01\'); -- 当月最后一天SELECT MAKEDATE(2023, 1); -- 创建日期(2023年第1天)SELECT MAKETIME(12, 30, 0); -- 创建时间SELECT PERIOD_ADD(202301, 5); -- 增加5个月(格式YYMM或YYYYMM)-- 12. 时区处理-- CONVERT_TZ() (需要时区表支持)SELECT CONVERT_TZ(NOW(), \'+00:00\', \'+08:00\'); -- 转换时区-- 13. 星期相关函数-- DAYOFWEEK(), DAYOFYEAR(), WEEK(), WEEKOFYEAR(), YEARWEEK()SELECT DAYOFWEEK(\'2023-01-01\'); -- 星期几(1=周日,7=周六)SELECT DAYOFYEAR(\'2023-01-01\'); -- 一年中的第几天SELECT WEEK(\'2023-01-01\'); -- 一年中的第几周SELECT WEEKOFYEAR(\'2023-01-01\');-- 同WEEK()SELECT YEARWEEK(\'2023-01-01\'); -- 年份和周数-- 14. 季度计算-- QUARTER()SELECT QUARTER(\'2023-04-01\'); -- 返回2(第二季度)-- 15. 时间戳处理-- TIMESTAMP(), TIMESTAMPADD(), TIMESTAMPDIFF()SELECT TIMESTAMP(\'2023-01-01\'); -- 转换为时间戳SELECT TIMESTAMPADD(MINUTE, 30, \'2023-01-01 12:00:00\'); -- 增加30分钟SELECT TIMESTAMPDIFF(MONTH, \'2023-01-01\', \'2023-06-01\'); -- 月份差

沈阳SEO网站优化