信息发布→ 登录 注册 退出

SQL 日期函数怎么计算日期差?

发布时间:2025-10-02

点击量:
SQL中计算日期差主要使用DATEDIFF函数,语法为DATEDIFF(datepart, startdate, enddate),支持day、month、year等单位;MySQL中参数顺序相反且仅支持天数差,PostgreSQL用减法,Oracle通过相减或EXTRACT,SQL Server完全支持标准语法;常用于计算年龄、入职天数等,需注意日期类型和顺序。

SQL 中计算日期差主要使用 DATEDIFF 函数,它能返回两个日期之间在指定单位下的差值。

使用 DATEDIFF 函数

DATEDIFF 是大多数 SQL 数据库支持的通用函数,语法如下:

DATEDIFF(datepart, startdate, enddate)

其中 datepart 指定要计算的时间单位,常见取值包括:

  • day:天数
  • month:月数
  • year:年数
  • hourminutesecond:时分秒

例如,计算两个日期之间的天数差:

SELECT DATEDIFF(day, '2025-01-01', '2025-01-10') AS day_diff; -- 返回结果:9

不同数据库中的写法差异

虽然多数数据库支持 DATEDIFF,但具体语法可能略有不同。

  • MySQL:也支持 DATEDIFF,但只返回天数差,且参数顺序为 (enddate, startdate)
  • PostgreSQL:不支持 DATEDIFF,可用减法直接计算日期差
  • Oracle:用两个 DATE 类型相减得到天数差,或使用 EXTRACT 配合 TIMESTAMP
  • SQL Server:完整支持 DATEDIFF,语法标准

例如在 MySQL 中:

SELECT DATEDIFF('2025-01-10', '2025-01-01') AS day_diff; -- 注意参数顺序与 SQL Server 相反

常用场景和注意事项

实际应用中常用于计算年龄、订单处理周期、用户活跃间隔等。

  • 确保传入的字段是日期类型,字符串需能正确解析为日期
  • 注意开始日期和结束日期的顺序,避免出现负数
  • 如果需要更精确的结果(如包含小时分钟),选择合适的 datepart
  • 跨月或跨年计算时,DATEDIFF(month, ...) 只看年月部分,不考虑具体天数

比如计算员工入职天数:

SELECT name, DATEDIFF(day, hire_date, GETDATE()) AS days_worked FROM employees;

基本上就这些,掌握 DATEDIFF 和各数据库的细微差别就能应对大部分日期差计算需求。

标签:# 就能  # 更精确  # 需注意  # 但只  # 实际应用  # 数据库中  # 它能  # 只看  # 不支持  # 相减  # mysql  # 数据库  # postgresql  # 字符串  # date  # select  # sql  # datediff函数  # datediff  # oracle  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!