Mysql中SQL语句中日期格式转换(DATE_FORMAT()篇)

本文介绍了MySQL中的date_format()函数,用于在查询时格式化日期和时间。通过示例展示了如何使用该函数,并详细列出各种可用的格式选项,如%Y-%m-%d%H:%i:%s等,帮助简化日期处理代码。

        鉴于平时时常会用到日期格式的转换,以提供给前端正确的时间显示格式,格式化的方式比较多,比如Java方式,举个栗子如下:

   Date date = new Date();
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String dateString = formatter.format(date);

但当我们遇到多个字段时,该方式无疑冗余了很多代码,选择在sql查询时就格式化日期格式就是更好的解决方式了。

今天浅说一下date_format()函数,具体的用法如下:

date_format():mysql中用于时间\日期的各种格式显示的函数

格式:DATE_FORMAT(date,format)            date:日期     format:格式

示例:

SELECT DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i%s') from dual;

 

format格式详解:

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

​综上是是对该函数用法的基本详解!!!

### SQL 中 `DATE_FORMAT` 函数的用法与相关问题 在 SQL 查询中,日期格式化是常见的操作,尤其在处理时间维度的数据时。MySQL 提供了 `DATE_FORMAT()` 函数,用于将日期或时间戳值按照指定的格式转换为字符串。 #### 基本语法 ```sql SELECT DATE_FORMAT(date_column, format_string) FROM table_name; ``` 其中 `date_column` 是表中的日期字段,`format_string` 是用户定义的格式模板。 例如: ```sql SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date; ``` 该语句将当前时间格式化为 `YYYY-MM-DD HH:MM:SS` 的形式输出。 #### 支持的格式符 以下是一些常用的格式符及其含义: | 格式符 | 含义 | |--------|-------------------| | `%Y` | 四位数的年份 | | `%y` | 两位数的年份 | | `%M` | 全称月份(January)| | `%m` | 数字月份(01-12) | | `%D` | 带后缀的日期(1st)| | `%d` | 数字日期(01-31) | | `%H` | 小时(00-23) | | `%h` | 小时(01-12) | | `%i` | 分钟(00-59) | | `%s` | 秒(00-59) | #### 使用场景 `DATE_FORMAT` 常用于报表生成、日志分析以及数据可视化前的预处理。例如,可以按月聚合销售数据: ```sql SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(amount) AS total_sales FROM orders GROUP BY month; ``` #### 注意事项与常见问题 - **时区影响**:如果数据库服务器和客户端处于不同的时区,可能会导致 `DATE_FORMAT` 返回的时间与预期不一致。应确保数据库连接使用正确的时区设置。 - **性能问题**:在大表上频繁使用 `DATE_FORMAT` 可能会影响查询性能,建议在应用层进行格式化,或对常用格式预先存储为冗余字段。 - **日志记录中的变化**:从 MySQL 5.6.4 开始,通用查询日志和慢查询日志中的时间戳列类型从 `TIMESTAMP` 更改为 `TIMESTAMP(6)`,这意味着支持微秒级别的精度[^3]。如果在这些日志表中使用 `DATE_FORMAT`,需要注意可能包含的小数秒部分。 - **格式代码错误**:在使用 `DATE_FORMAT` 时,如果格式字符串拼写错误或不被支持,可能导致 SQL 语法错误。例如,误用了非标准格式码,会导致解析失败。请参考官方文档确认支持的格式码列表。 #### 示例:提取日期的不同部分 可以使用 `DATE_FORMAT` 提取特定的部分,如“星期几”、“年份+季度”等: ```sql SELECT DATE_FORMAT('2025-04-05', '%W') AS day_of_week; -- 输出 Saturday SELECT DATE_FORMAT('2025-04-05', '%Y-Q%q') AS quarter; -- 输出 2025-Q2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新建文件夹-

各位的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值