如何计算SQL日期差值_使用DATEDIFF函数实现逻辑判断

张开发
2026/4/19 4:15:59 15 分钟阅读

分享文章

如何计算SQL日期差值_使用DATEDIFF函数实现逻辑判断
MySQL的DATEDIFF仅支持天数差会截断时间部分SQL Server的DATEDIFF支持多种单位但需正确指定参数PostgreSQL无该函数需用减法或EXTRACT。MySQL 的 DATEDIFF 只支持天数差别想用它算小时或秒DATEDIFF 在 MySQL 中只接受两个 DATE 或能自动转成日期的值比如 2024-03-15 或 DATE(NOW())返回整数天数。它会直接截断时间部分——DATEDIFF(2024-03-15 14:30:00, 2024-03-14 23:59:59) 结果是 1不是 0更不会告诉你差了 14 小时 30 分。常见错误现象DATEDIFF 返回意外的 0 或 1尤其在对比同一天不同时间点时或者误以为它能处理 TIMESTAMP 精度结果丢失全部时间信息。如果要算小时、分钟、秒请改用 TIMESTAMPDIFF并明确指定单位如 TIMESTAMPDIFF(HOUR, start_time, end_time)DATEDIFF(a, b) 永远等价于 TO_DAYS(a) - TO_DAYS(b)底层就是按日历日做减法注意时区输入值若含时区偏移如 2024-03-15 10:00:0008:00MySQL 会先转成会话时区再截日期可能引发跨日偏差SQL Server 的 DATEDIFF 单位参数必须写对大小写不敏感但拼写不能错SQL Server 的 DATEDIFF 功能强得多支持 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、YEAR 等十多种单位但第一个参数是单位名不是字符串字面量——DATEDIFF(day, start, end) 会报错正确写法是 DATEDIFF(day, start, end)无引号。使用场景判断订单是否超时DATEDIFF(minute, created_at, GETDATE()) 30、统计用户上次登录距今多少周DATEDIFF(week, last_login, GETDATE())。单位名不区分大小写但拼写必须准确dd 和 day 都行但 days 或 dy 不行结果是「边界跨越次数」不是精确间隔比如 DATEDIFF(MONTH, 2024-01-31, 2024-02-28) 返回 1跨了 1 个“月边界”哪怕实际只差 28 天避免用 YEAR 判断年龄DATEDIFF(YEAR, 2000-12-31, 2024-01-01) 得到 24但人还没过生日PostgreSQL 没有 DATEDIFF直接用减法或 AGE() 更自然PostgreSQL 不提供 DATEDIFF 函数。日期/时间相减本身就有意义end_time - start_time 返回 interval 类型如 3 days 02:30:45再用 EXTRACT 提取具体数值。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章