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'); -- 月份差
相关推荐
门前云梦2 分钟前
ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)
前端·经验分享·笔记·语言模型·node.js·github·pip
骁的小小站37 分钟前
The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(六)
linux·经验分享·笔记·学习·bash
Fine姐38 分钟前
口语01-don‘t judge a book by its cover
笔记
SelectDB1 小时前
浩瀚深度:从 ClickHouse 到 Doris,支撑单表 13PB、534 万亿行的超大规模数据分析场景
大数据·数据库·apache
SelectDB1 小时前
公开免费!Apache Doris & SelectDB 培训与认证课程正式上线
大数据·数据库·apache
我的ID配享太庙呀1 小时前
从零开始:在 PyCharm 中搭建 Django 商城的用户注册与登录功能(轮播图+商品页-小白入门版)
数据库·python·django·sqlite·web·教育电商
大视码垛机2 小时前
协作机器人掀起工厂革命:码垛场景如何用数据重塑制造业命脉?
大数据·数据库·人工智能
huangyuchi.3 小时前
【Linux】进程切换与优先级
linux·运维·笔记·进程切换·进程优先级·寄存器·linux调度算法
火凤凰--凤凰码路4 小时前
MySQL 中的“双路排序”与“单路排序”:原理、判别与实战调优
android·数据库·mysql
过客随尘4 小时前
Mysql RR事务隔离级别引发的生产Bug,你中招了吗?
后端·mysql