MySQL日期类型转换指南:Cast/Convert、Date_Format与Str_To_Date详解

阿麦
阿麦
发布时间:2026-10-15 | 4人浏览过
原创

在MySQL开发中,经常需要将日期、时间与字符串或其他数据类型进行转换。本文系统介绍了三种核心转换方法:利用Cast()和Convert()进行基础类型互转,使用Date_Format()灵活控制输出样式,以及通过Str_To_Date()逆向解析字符串。这些方法涵盖了日常开发中日期的显示、存储及计算场景,助力高效解决数据格式问题。

1. 使用 Cast() 和 Convert() 实现基础类型转换

这两个函数是MySQL中进行显式类型转换最通用的工具。它们可以将表达式转换为指定的数据类型,如字符串(char)、日期(date)、时间(time)、日期时间(datetime),以及数值类型(浮点型decimal、整数signed、无符号整数unsigned)。

语法与示例操作

语法格式:

  • convert( 表达式, 数据类型 )
  • cast( 表达式 as 数据类型 )

关键参数说明:

  • 表达式:需要被转换的原始值(如 NOW())。
  • 数据类型:目标类型,常用 SIGNED (有符号整数) 或 CHAR (字符串)。

实操验证:

  1. 转换为整数(Signed):将当前时间戳转换为数字格式。
mysql> select cast(now() as signed);
+-----------------------+
| cast(now() as signed) |
+-----------------------+
|        20201030042922 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select convert(now(),signed);
+-----------------------+
| convert(now(),signed) |
+-----------------------+
|        20201030042933 |
+-----------------------+
1 row in set (0.00 sec)
  1. 转换为字符(Char):将时间转换为默认的日期时间字符串格式。
mysql> select cast(now() as char);
+---------------------+
| cast(now() as char) |
+---------------------+
| 2020-10-30 04:29:44 |
+---------------------+

2. 使用 Date_Format() 自定义日期显示格式

当需要将日期或时间数据转换为符合特定规范的字符串时(如日志记录、报表展示),Date_Format() 是最佳选择。它支持丰富的格式化占位符。

第1步:定义日期与时间输出格式

语法: date_format(date, format)

参数:

  • date:合法的日期或时间值。
  • format:规定输出的字符串格式。

常用格式代码表:

格式 描述 格式 描述
%Y年,4位 (如 2020)%m月,数值(00-12)
%M月名 (如 October)%d日的天,数值(00-31)
%H小时 (00-23)%i分钟,数值(00-59)
%s/%S秒(00-59)%pAM 或 PM
%W星期名 (如 Sunday)%w周的天 (0=星期日...6=星期六)
%a缩写星期名%D带有英文前缀的月中的天 (如 1st)

第2步:应用示例——日期转字符串

将当前时间转换为 "年-月-日" 格式:

mysql> select date_format(now(),'%Y-%m-%d');
+-------------------------------+
| date_format(now(),'%Y-%m-%d') |
+-------------------------------+
| 2020-10-30                    |
+-------------------------------+

第3步:综合案例——计算用户年龄

假设有一个学生表 student,包含出生日期字段 Brithdate,需要查询前两位学生的当前年龄。

操作逻辑:

  1. 使用 NOW() 获取当前日期。
  2. 利用 Date_Format(NOW(), '%Y') 提取当前年份字符串。
  3. 利用 Date_Format(Brithdate, '%Y') 提取出生年份字符串。
  4. 外层包裹 CONVERT(..., SIGNED) 将年份转为整数相减。

执行SQL:

-- 查看原始数据
mysql> select * from student limit 2;
+------------+-----------+-----+------------+-----------------------+---------+
| Sid        | Sname     | Sex | Brithdate  | Specialty             | AScores |
+------------+-----------+-----+------------+-----------------------+---------+
| 2011216001 | 赵成刚    | 男  | 1992-05-05 | 计算机应用技术        |   405.0 |
| 2011216002 | 李婧      | 女  | 1992-01-06 | 计算机应用技术        |   395.5 |
+------------+-----------+-----+------------+-----------------------+---------+

-- 计算并输出年龄
mysql> select sname,
    -> convert(date_format(now(),'%Y'),signed)-convert(date_format(Brithdate,'%Y'),signed) as '年龄' 
    -> from student 
    -> limit 2;
+-----------+--------+
| sname     | 年龄   |
+-----------+--------+
| 赵成刚    |     28 |
| 李婧      |     28 |
+-----------+--------+

3. 使用 Str_To_Date() 实现字符串转日期

当从外部导入数据或接收前端字符串参数时,通常需要使用 Str_To_Date() 将其解析为 MySQL 内部的 Date 或 DateTime 类型,以便进行时间比较或计算。

语法与规则

语法: str_to_date(date, format)

注意事项:

  1. 纯数字要求:待转换的字符串内容中只能出现数字(除分隔符外),否则可能返回 NULL。
  2. 默认拼接规则:如果格式字符串仅包含日期部分(无时间),且输入字符串至少包含8位数字,MySQL 会自动按“前4位年、中间2位月、后2位日”解析,结果自动用 - 拼接。
  3. 有效性校验:转换后的日期必须合法(如月份不能为13,日期不能超过当月最大天数),否则返回 NULL。
  4. 长度截断:若字符串超过8位且格式中无时间定义,自动取前8位进行日期转换。

实操示例

  1. 标准日期转换:将短日期字符串转为完整日期格式。
mysql> select str_to_date('2020-10-3','%Y-%m-%d');
+-------------------------------------+
| str_to_date('2020-10-3','%Y-%m-%d') |
+-------------------------------------+
| 2020-10-03                          |
+-------------------------------------+
  1. 不匹配格式的处理:若格式仅指定年,但输入含日月信息,结果中的日月部分会归零。
mysql> select str_to_date('2020-10-3','%Y');
+-------------------------------+
| str_to_date('2020-10-3','%Y') |
+-------------------------------+
| 2020-00-00                    |
+-------------------------------+
-- 注意:此处结果取决于具体MySQL版本实现,通常不规范输入需谨慎
  1. 时间字符串转换:将小时分钟字符串转为完整时间。
mysql> select str_to_date('10:11','%H:%i:%S');
+---------------------------------+
| str_to_date('10:11','%H:%i:%S') |
+---------------------------------+
| 10:11:00                        |
+---------------------------------

总结

掌握 CAST/CONVERT 的基础类型互转、DATE_FORMAT 的美化输出以及 STR_TO_DATE 的数据入库解析,是 MySQL 日期处理的三大支柱。在实际项目中,务必确保输入数据的格式与预期严格一致,避免因格式不匹配导致的 NULL 值错误。以上就是 MySQL 日期类型转换的详细内容,更多关于 MySQL 日期处理函数的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表