MySQL日期与时间函数详解:获取、运算及格式化实例

顾星河
顾星河
发布时间:2026-10-15 | 2人浏览过
原创

本文整理MySQL中高频使用的日期与时间处理函数,包括获取当前时间、日期加减运算、两个日期的差值计算以及日期字符串格式化。通过对比NOW()与SYSDATE()的执行差异,并提供DATE_FORMAT和STR_TO_DATE的代码示例,解决数据库中时间类型存储、读取及业务计算中的常见问题。

1. 获取当前日期和时间

在处理日志记录、订单状态或用户数据时,获取准确的时间戳是基础需求。MySQL提供了多种方式来获取当前的日期、时间或二者结合的值。

第1步:使用函数获取当前日期与时间

目的:根据业务场景选择合适的函数获取当前时间点。
动作:执行相应的日期或时间函数。
结果:获取以字符型或数值型返回的日期时间数据。

获取当前日期:
使用 CURDATE()、CURRENT_DATE() 或 CURRENT_DATE。这些函数会返回当前系统的日期(格式通常为 YYYY-MM-DD)。

获取当前时间:
使用 CURTIME()、CURRENT_TIME() 或 CURRENT_TIME。返回当前系统的时间(格式通常为 HH:MM:SS)。

获取当前日期和时间:
最常用的组合是 NOW()、CURRENT_TIMESTAMP()、LOCALTIMESTAMP() 或 SYSDATE()。它们不仅包含日期,还精确到秒。

2. NOW() 与 SYSDATE() 的关键区别

在涉及事务处理、高并发写入或对时间精度有严格要求的场景中,区分这两个函数至关重要。虽然语法相似,但它们的执行时机不同。

第2步:理解时间点的确定性

NOW() 的行为:
NOW() 返回的是该 SQL 语句开始执行那一刻的时间。在同一语句中多次调用 NOW(),其返回值始终保持一致,这有利于保证事务内时间的一致性。

S YSDATE() 的行为:
SYSDATE() 则更动态,它返回函数被执行那一刻的确切时间。即使在同一行查询中,如果两次调用之间存在明显的延迟,返回的结果也可能不同。

自定义精度:
SYSDATE() 支持传入一个参数来指定小数秒的精度(fsp),范围在 0 到 6 之间。若不传参,默认通常只显示到秒;若传入大于 0 的数字,则会显示毫秒/微秒级精度。

3. 日期与时间的比较

在进行数据筛选时,我们经常需要判断某个记录是否发生在今天、昨天或者特定时间段之前。MySQL 允许直接对符合标准格式的日期字符串进行比较。

第3步:实施日期范围过滤

目的:从表中提取指定时间范围内的数据。
动作:利用运算符进行直接的日期大小对比。
结果:输出符合条件的记录集。

只要你的日期格式是合法的 MySQL 标准格式(如 'YYYY-MM-DD' 或 'YYYY-MM-DD HH:MM:SS'),可以直接使用大于、小于、大于等于等符号进行比较,无需复杂的类型转换。以下三种写法在功能上是等效的,都能准确识别出 2022-11-17 的记录:

注意:上述三个语句输出结果是一样的,这说明 MySQL 引擎能够智能解析合法的日期字符串并进行比较。

4. 日期与时间的运算

除了获取和比较,日常开发中更常见的需求是计算过去或未来的时间,或者计算两个时间节点之间的间隔。

第4步:使用内置函数进行时间加减

DATE_ADD() 函数:用于增加或减少日期。
语法:DATE_ADD(date, INTERVAL expr type)。
其中 INTERVAL 后的值如果是正数,表示往后增加(例如未来时间);如果是负数,则表示往前减少(例如历史时间)。常用的类型单位有 YEAR, MONTH, DAY, HOUR 等。

DATEDIFF() 函数:计算两个日期之间的天数差。
该函数只比较日期部分(忽略时间),返回第一个日期减去第二个日期的天数。注意参数顺序,结果为 Date1 - Date2。

TIMEDIFF() 函数:计算两个时间戳之间的时分秒差值。
当需要知道两段时间相隔多久(如服务运行时长、任务耗时)时,此函数非常实用,返回值的格式为 HH:MM:SS。

5. 日期格式化和类型转换

前端展示通常需要定制化的字符串格式(如“2023年10月27日”),而将外部输入的字符串存入数据库则需要转换为 DATETIME 类型。这两个方向的操作分别对应 DATE_FORMAT 和 STR_TO_DATE。

第5步:配置日期时间格式

目的:实现日期数据的可视化展示或入库标准化。
入口:查询语句中使用格式化函数。
参数:DATE_FORMAT(date, format) 中的 format 由特定的占位符组成。

DATE_FORMAT():
这是一个极高频率使用的函数,核心用法是 DATE_FORMAT(SYSDATE(), '%Y-%m-%d %H:%i:%s')。
以下是几个常用且实用的格式化标识符:

  • %p:上午或下午(AM / PM)。
  • %r:时间,12 小时制,带 AM/PM(HH:mm:ss Am/pm)。
  • %W:周的名称,例如 Tuesday。
  • %w:星期中的第几天,0 代表周日,6 代表周六。
  • %j:一年中的第几天,三位数字表示(001 ~ 366)。

DATE_FORMAT() 与 STR_TO_DATE() 的对比:
在实际业务闭环中,这对函数往往是互为逆操作的:

  • DATE_FORMAT(date,format):负责“输出”。将数据库里的 DATETIME 数据转换为符合人类阅读习惯的 String 类型字符串,用于 API 接口返回或页面渲染。
  • STR_TO_DATE(str,format):负责“入库”。将一个符合特定格式的字符串按照 format 的规则解析,转换回 DATETIME 类型存入数据库。需特别注意:字符串内容必须严格匹配格式声明,否则 MySQL 可能会返回 NULL 或报错。

如上例所示,第一个返回值展示了格式化后的纯文本字符串(String),第二个返回值则是成功转换后恢复的数据库原生类型(Datetime)。

第6步:提取日期的特定片段

如果只需要年份做统计或分析,可以使用专门的提取函数,避免写冗长的格式化代码。

YEAR() 函数:直接从日期或时间表达式中提取年份值,返回四位整数。

总结

以上是对 MySQL 常用日期与时间函数的详细解析。从基础的时间获取,到中级的运算对比,再到高级的格式转换,掌握这些工具能让你在处理涉及时间的业务逻辑时游刃有余。以上就是 MySQL 日期时间与格式化函数的详细内容,更多关于 SQL 数据库优化的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表