当前位置 主页 > 技术大全 >

    mysql时间转字符串,一个非常强大和常用的函数

    栏目:技术大全 时间:2025-10-09 16:15


    在 MySQL 中将时间(或日期时间)转换为字符串,主要使用 DATE_FORMAT() 函数。这是一个非常强大和常用的函数。
    下面我将从基础到进阶,详细讲解如何使用它。

    核心函数:DATE_FORMAT(date, format)

    • date: 你要转换的日期或日期时间列、变量或表达式。例如 NOW()CURDATE() 或者一个表中的 created_at 字段。
    • format: 一个包含格式说明符的字符串,用来定义输出的样式。

    常用格式说明符

    说明符 描述 示例 (基于 2023-10-27 15:30:05)
    %Y 4 位数的年份 2023
    %y 2 位数的年份 23
    %m 月份,数值 (01-12) 10
    %c 月份,数值 (1-12) 10
    %M 月份,英文全名 October
    %b 月份,英文缩写 Oct
    %d 月份中的天数 (01-31) 27
    %e 月份中的天数 (1-31) 27
    %H 小时 (00-23),24 小时制 15
    %h 或 %I 小时 (01-12),12 小时制 03
    %i 分钟 (00-59) 30
    %s 秒 (00-59) 05
    %p AM 或 PM PM
    %W 星期,英文全名 Friday
    %w 星期,数值 (0=Sunday, 1=Monday, ..., 6=Saturday) 5
    %% 一个字面意义上的 % 字符 %

    常见场景示例

    假设我们有一个 orders 表,其中有一个 created_at 字段,类型为 DATETIME
    sql
    -- 示例数据
    CREATE TABLE orders (
        id INT PRIMARY KEY,
        product_name VARCHAR(100),
        created_at DATETIME
    );
    
    INSERT INTO orders VALUES (1, 'Laptop', '2023-10-27 15:30:05');
    INSERT INTO orders VALUES (2, 'Mouse', '2023-01-05 09:08:07');
    
     

    1. 转换为标准的 'YYYY-MM-DD' 格式

    这是最常见的需求之一。
    sql
    SELECT 
        id,
        product_name,
        created_at,
        DATE_FORMAT(created_at, '%Y-%m-%d') AS formatted_date
    FROM 
        orders;
    
     
    结果:
    id product_name created_at formatted_date
    1 Laptop 2023-10-27 15:30:05 2023-10-27
    2 Mouse 2023-01-05 09:08:07 2023-01-05

    2. 转换为带时间的 'YYYY 年 MM 月 DD 日 HH:mm:ss' 格式

    这在中文环境中非常常用。
    sql
    SELECT 
        id,
        DATE_FORMAT(created_at, '%Y年%m月%d日 %H:%i:%s') AS formatted_datetime
    FROM 
        orders;
    
     
    结果:
    id formatted_datetime
    1 2023 年 10 月 27 日 15:30:05
    2 2023 年 01 月 05 日 09:08:07

    3. 只提取时间部分 'HH:mm'

    sql
    SELECT 
        id,
        DATE_FORMAT(created_at, '%H:%i') AS order_time
    FROM 
        orders;
    
     
    结果:
    id order_time
    1 15:30
    2 09:08

    4. 转换为英文格式 'Month DD, YYYY'

    sql
    SELECT 
        id,
        DATE_FORMAT(created_at, '%M %d, %Y') AS english_date
    FROM 
        orders;
    
     
    结果:
    id english_date
    1 October 27, 2023
    2 January 05, 2023

    5. 结合字符串进行自定义格式

    你可以在格式字符串中加入任何你想要的固定文本。
    sql
    SELECT 
        id,
        DATE_FORMAT(created_at, 'Order placed on %W, %M %e, %Y at %h:%i %p') AS full_description
    FROM 
        orders;
    
     
    结果:
    id full_description
    1 Order placed on Friday, October 27, 2023 at 03:30 PM
    2 Order placed on Thursday, January 5, 2023 at 09:08 AM

    反向操作:字符串转时间

    有时候你也需要做反向操作,将字符串解析为日期时间类型,这时会用到 STR_TO_DATE() 函数。
    STR_TO_DATE(string, format)
    sql
    -- 将字符串 '2023年10月27日' 转换为 DATE 类型
    SELECT STR_TO_DATE('2023年10月27日', '%Y年%m月%d日') AS converted_date;
    -- 结果: 2023-10-27
    
    -- 将字符串 '15:30:05' 转换为 TIME 类型
    SELECT STR_TO_DATE('15:30:05', '%H:%i:%s') AS converted_time;
    -- 结果: 15:30:05
    
     
    注意STR_TO_DATE 的 format 必须和你的 string 格式完全匹配,否则会返回 NULL

    总结

    需求 函数 示例
    时间转字符串 DATE_FORMAT() DATE_FORMAT(NOW(), '%Y-%m-%d')
    字符串转时间 STR_TO_DATE() STR_TO_DATE('2023-10-27', '%Y-%m-%d')
    DATE_FORMAT() 是处理 MySQL 日期时间格式化最核心、最灵活的工具。熟练掌握常用的格式说明符,就能满足绝大多数开发需求。
1分钟搞定MySQL部署!Docker最强实操指南,含所有常用命令和配置
忘记MySQL密码怎么办?别慌!用这一招跳过验证,轻松重置管理员权限
MySQL自增主键用完怎么办?从原理到实战,全面破解开发中的高频难题
MySQL权限混乱?这几个命令让你彻底理清用户清单与权限归属
你的数据库安全吗?读懂MySQL这几种日志,关键时刻能「救你一命」
MySQL性能上不去?八成是这里没配好!手把手教你搞定my.cnf核心配置
修改MySQL字段长度别乱来!这3个核心要点和1个致命陷阱,新手必看
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(上篇)
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(下篇)