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

前言

写sql时经常用到时间处理函数,我整理了一份mysql的常用sql笔记,供大家参考。

如果对你有帮助,请点赞支持~ 多谢🙏

笔记

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, - INTERVAL
SELECT 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-01
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');      -- 2023年01月01日
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');          -- 14:30:45
SELECT 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'); -- 月份差
相关推荐
倔强的石头_15 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker