首页 游戏 软件 资讯 排行榜 专题
首页
数据库
SQL如何将日期转换为特定格式?DATE_FORMAT函数详解

SQL如何将日期转换为特定格式?DATE_FORMAT函数详解

热心网友
89
转载
2026-04-29

SQL如何将日期转换为特定格式?DATE_FORMAT函数详解

SQL如何将日期转换为特定格式?DATE_FORMAT函数详解

MySQL里DATE_FORMAT函数怎么用?

开门见山,DATE_FORMAT是MySQL的“独家”函数。如果你在PostgreSQL、SQL Server或者SQLite里直接调用它,系统报错可不是因为你写错了,而是它压根就不存在——这是数据库方言的差异,迁移代码时尤其要留心。

这个函数的核心任务很明确:把DATEDATETIMETIMESTAMP这类日期时间值,按照你指定的“模板”,转换成一个格式规整的字符串。这里有个关键点必须强调:转换结果是字符串,不再是日期类型。这意味着,它不能直接拿去做日期计算或者比较,除非你再把它转换回去。

它的基本语法相当直观:DATE_FORMAT(date, format)。其中,date就是你要处理的日期表达式,而format则是一个包含特定占位符的字符串模板,比如我们最熟悉的‘%Y-%m-%d’

常用格式符有哪些?哪些容易写错?

使用DATE_FORMAT时,格式符是重中之重,而且这里有几个“坑”新手很容易掉进去。首先,MySQL的格式符是大小写敏感的,大小写不同,含义天差地别。最经典的混淆就是把%y(两位年份)和%Y(四位年份)搞混,或者在需要24小时制的时候误用了%h(12小时制)。

下面这些是日常开发中最常用、也最需要仔细区分的格式符:

  • %Y → 四位年份(例如 2024),%y → 两位年份(例如 24
  • %m → 补零的两位月份(0112),%c → 不补零的月份(112
  • %d → 补零的两位日期(0131),%e → 不补零的日期(131
  • %H → 24小时制的小时(0023),%h%I → 12小时制(0112
  • %i → 分钟(0059),千万别写成 %m(那是月份)
  • %s → 秒(0059),它代表秒数,不是字符串的缩写

举个例子:DATE_FORMAT(NOW(), ‘%Y年%m月%d日 %H:%i’) 会返回像 “2024年04月22日 15:30” 这样的中文字符串,非常适合报表展示。

DATE_FORMAT能处理NULL或非法日期吗?

很遗憾,它不能“智能”处理异常值。如果传入的日期是NULL,那么结果也是NULL。如果传入一个非法日期,比如‘2024-02-30’,事情就有点棘手了:在MySQL的严格SQL模式下,它会直接报错Incorrect date value;而在非严格模式下,它可能会先被转换成‘0000-00-00’这样的零值,再进行格式化,最终结果自然是不可靠的。

因此,在生产环境中,更安全的做法是加上条件判断:

SELECT
  CASE
    WHEN order_date IS NULL THEN ‘未知日期’
    WHEN order_date = ‘0000-00-00’ THEN ‘日期无效’
    ELSE DATE_FORMAT(order_date, ‘%Y/%m/%d’)
  END AS formatted_date
FROM orders;

另外,还有一个容易被忽略的特性:DATE_FORMAT 对时区不敏感。它只会按照字段里存储的原始值进行格式化,不会自动转换为当前会话的时区。如果你的数据库里存的是UTC时间,但希望按北京时间显示,正确的步骤是先用CONVERT_TZ函数转换时区,然后再进行格式化。

替代方案:其他数据库怎么实现类似功能?

既然DATE_FORMAT是MySQL专属,那在其他数据库里该怎么办呢?答案是各有各的“方言”。

PostgreSQL使用的是TO_CHAR(date, ‘YYYY-MM-DD HH24:MI’);SQL Server(2012及以上版本)推荐使用FORMAT(date, ‘yyyy-MM-dd HH:mm’),老版本则常用CONVERT函数配合风格码;SQLite则用strftime(‘%Y-%m-%d’, date)。这些函数的名称、占位符语法乃至大小写规则都完全不同,跨数据库迁移时,这部分代码基本都需要重写。

最后,再提一个更隐蔽的陷阱:当你把DATE_FORMAT的结果用于GROUP BYORDER BY子句时,实际上是在对格式化后的字符串进行排序。如果格式像‘2024-01’这样本身具有顺序性,那可能没问题;但如果格式是‘一月2024’,排序结果很可能不符合你的日期逻辑预期。

所以,记住一个最佳实践:凡是涉及到排序、筛选或分组的逻辑,尽量使用原生的日期时间字段进行操作。DATE_FORMAT这类函数,最好只用在最终的结果展示层。

来源:https://www.php.cn/faq/2318623.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

比特币突破11.1万美元 解析MYX暴涨260%与WLD跟涨57%背后原因
web3.0
比特币突破11.1万美元 解析MYX暴涨260%与WLD跟涨57%背后原因

比特币强势企稳11 1万美元,山寨币行情剧烈分化:MYX暴涨260%,WLD跟涨,FORM破位下跌 近期加密货币市场呈现显著的“冰火两重天”格局。一方面,比特币(BTC)作为市场基石,已成功站稳11 1万美元关键支撑位上方,显示出强劲的买盘承接力,为市场整体情绪提供了稳定锚。另一方面,山寨币(Alt

热心网友
05.20
SQL如何将日期转换为特定格式?DATE_FORMAT函数详解
数据库
SQL如何将日期转换为特定格式?DATE_FORMAT函数详解

SQL如何将日期转换为特定格式?DATE_FORMAT函数详解 MySQL里DATE_FORMAT函数怎么用? 开门见山,DATE_FORMAT是MySQL的“独家”函数。如果你在PostgreSQL、SQL Server或者SQLite里直接调用它,系统报错可不是因为你写错了,而是它压根就不存在—

热心网友
04.29
SQL怎样将秒数转换为时分秒格式_利用SEC_TO_TIME或TIME_FORMAT
数据库
SQL怎样将秒数转换为时分秒格式_利用SEC_TO_TIME或TIME_FORMAT

SQL怎样将秒数转换为时分秒格式_利用SEC_TO_TIME或TIME_FORMAT SEC_TO_TIME 能直接转,但只适用于 0–838:59:59 范围 说到秒数转时分秒,很多人的第一反应就是 MySQL 自带的 SEC_TO_TIME 函数。没错,它确实能把一个整数秒数,直接变成 TIME

热心网友
04.27
如何排查RMAN由于时区差异导致的时间点恢复偏差_NLS_DATE_FORMAT与环境变量匹配
数据库
如何排查RMAN由于时区差异导致的时间点恢复偏差_NLS_DATE_FORMAT与环境变量匹配

RMAN时间点恢复不准确?NLS_DATE_FORMAT参数可能是罪魁祸首 是的,绝大多数情况下,问题根源确实在于此。其核心原理并不复杂:当您在RMAN中执行 SET UNTIL TIME 或 RECOVER DATABASE UNTIL TIME 命令时,其后跟随的时间字符串,RMAN本身并不会自

热心网友
04.26
SQL如何实现按月分组统计销售总额_DATE_FORMAT与聚合函数
数据库
SQL如何实现按月分组统计销售总额_DATE_FORMAT与聚合函数

MySQL中DATE_FORMAT按月分组少数据,因它默认返回字符串且静默过滤空值、非法日期(如 0000-00-00 )及时区偏差;更稳做法是GROUP BY YEAR(sale_date), MONTH(sale_date)。 MySQL里用DATE_FORMAT按月分组为什么总少数据? 这事儿

热心网友
04.25

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

苹果50周年总部庆典音乐会盛大举行
iphone
苹果50周年总部庆典音乐会盛大举行

为庆祝成立50周年,苹果在全球多地门店举办系列庆祝活动。最盛大的庆典在其总部ApplePark举行,员工齐聚草坪,传奇音乐人保罗·麦卡特尼登台献唱,首席执行官蒂姆·库克也参与其中。这场科技与艺术交融的盛会,既是对过往传奇的致敬,也寓意着新篇章的开启。

热心网友
05.20
苹果公司成立50周年库克内部信回顾从车库到25亿台销量历程
iphone
苹果公司成立50周年库克内部信回顾从车库到25亿台销量历程

苹果公司成立五十周年之际,首席执行官蒂姆·库克发布内部信回顾历程。信中指出,公司从车库中的一台原型机起步,如今全球活跃设备已达25亿台。库克强调,未来需主动创造而非等待,并鼓励员工铭记创新精神,共同把握机遇,开创下一个五十年。

热心网友
05.20
库克揭秘iPod爆红背后 苹果如何打造世界级供应链体系
iphone
库克揭秘iPod爆红背后 苹果如何打造世界级供应链体系

苹果CEO库克在专访中回顾了iPod的诞生历程。该产品以口袋装千首歌的能力革新了音乐消费方式。其爆红要求苹果在三个月内生产约1500万台,这极大考验了供应链。此次极限压力测试为苹果锻造出世界级供应链能力奠定了基础。库克还透露,首台原型机播放的第一首歌是《HeyJude》。

热心网友
05.20
段永平清仓阿里加仓英伟达拼多多 罕见布局Web3投资Circle
web3.0
段永平清仓阿里加仓英伟达拼多多 罕见布局Web3投资Circle

知名投资人段永平家族办公室持仓市值升至约200亿美元。本季度清仓阿里,减持苹果、台积电;重仓AI与电动车赛道,大幅增持英伟达并新建仓特斯拉,拼多多获增持。其首次跨足Web3领域,建仓稳定币发行商Circle,显示对合规区块链基础设施的关注。

热心网友
05.20
Mac放大镜功能开启指南 轻松看清屏幕细节
系统平台
Mac放大镜功能开启指南 轻松看清屏幕细节

Mac内置的“缩放”辅助功能可放大屏幕细节。通过系统设置开启该功能后,可选择画中画或全屏模式。用户可使用修饰键配合触控板手势、快捷键组合、双击Control+Option或鼠标智能缩放等多种方式灵活操作,满足不同场景下的查看需求。

热心网友
05.20