1. MySQL日期时间处理基础
MySQL作为最流行的关系型数据库之一,其日期时间处理功能在实际开发中扮演着重要角色。无论是电商平台的订单时间记录,还是金融系统的交易时间戳,亦或是内容管理系统的发布时间,都离不开对日期时间类型的精准操作。
1.1 日期时间类型概述
MySQL提供了五种主要的日期时间类型:
- DATE:仅存储日期,格式为'YYYY-MM-DD',范围从'1000-01-01'到'9999-12-31'
- TIME:仅存储时间,格式为'HH:MM:SS',范围从'-838:59:59'到'838:59:59'
- DATETIME:存储日期和时间,格式为'YYYY-MM-DD HH:MM:SS',范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
- TIMESTAMP:与DATETIME类似,但范围较小('1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC),且会自动转换为UTC存储
- YEAR:仅存储年份,1字节,范围1901到2155
注意:TIMESTAMP类型在MySQL 8.0中行为有所变化,不再自动更新为当前时间戳,除非显式定义为ON UPDATE CURRENT_TIMESTAMP
1.2 为什么需要类型转换
在实际业务场景中,日期时间类型转换的需求主要来自:
- 数据导入导出:CSV、Excel等外部数据源通常以字符串形式存储日期时间
- API交互:前后端交互时,JSON通常将日期时间序列化为字符串
- 报表生成:不同地区对日期时间格式有不同要求
- 数据分析:需要对日期时间进行聚合、比较等操作
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串与日期时间类型的相互转换
2.1 字符串转DATE/TIMESTAMP
2.1.1 STR_TO_DATE函数详解
STR_TO_DATE函数是MySQL中处理字符串转日期时间的主要工具,其语法为:
sql复制STR_TO_DATE(str, format)
典型应用场景:
sql复制-- 处理美国格式日期
SELECT STR_TO_DATE('08/24/2024', '%m/%d/%Y') AS us_date;
-- 处理带中文的日期字符串
SELECT STR_TO_DATE('2024年08月24日', '%Y年%m月%d日') AS cn_date;
-- 处理不完整日期
SELECT STR_TO_DATE('2024-08', '%Y-%m') AS partial_date;
注意事项:当字符串与格式不匹配时,STR_TO_DATE会返回NULL而非报错,建议配合IFNULL或COALESCE使用
2.1.2 隐式转换的风险
MySQL在某些情
