You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中计算起始日期后已过的x天间隔数?

SQL计算起始日期到目标日期的指定天数间隔数

问题场景

给定起始日期outset_date和目标日期date_of_interest,需要计算从起始日到目标日为止,已经过去了多少个指定x天的间隔。以x=4天为例:

  • 起始日2023-01-11到2023-01-13(相差2天)→ 返回1(属于第1个4天间隔)
  • 到2023-01-18(相差7天)→ 返回2(属于第2个4天间隔)
  • 到2023-02-02(相差22天)→ 返回6(属于第6个4天间隔)

测试用表结构与数据:

CREATE TABLE my_tbl (outset_date DATE, date_of_interest DATE);

INSERT INTO my_tbl (outset_date, date_of_interest)
VALUES ('2023-01-11', '2023-01-13'),
       ('2023-01-11', '2023-01-18'),
       ('2023-01-11', '2023-02-02');

MySQL 实现方案

核心逻辑:先计算两个日期的天数差,再通过向下取整后加1的方式得到间隔数(起始日本身属于第1个间隔)。

方法1:使用FLOOR函数

SELECT
    outset_date,
    date_of_interest,
    FLOOR(DATEDIFF(date_of_interest, outset_date) / 4) + 1 AS how_many_intervals_have_passed
FROM my_tbl;

方法2:使用CEIL函数

SELECT
    outset_date,
    date_of_interest,
    CEIL((DATEDIFF(date_of_interest, outset_date) + 1) / 4) AS how_many_intervals_have_passed
FROM my_tbl;

PostgreSQL 实现方案

PostgreSQL中直接通过日期减法得到天数差,再套用同样的间隔计算逻辑。

方法1:使用FLOOR函数

SELECT
    outset_date,
    date_of_interest,
    FLOOR((date_of_interest - outset_date)::INTEGER / 4) + 1 AS how_many_intervals_have_passed
FROM my_tbl;

方法2:使用CEIL函数

注意需用浮点数除法避免整数截断:

SELECT
    outset_date,
    date_of_interest,
    CEIL(((date_of_interest - outset_date)::INTEGER + 1) / 4.0) AS how_many_intervals_have_passed
FROM my_tbl;

通用说明

  • 若需要修改间隔天数x,只需将语句中的4替换为目标数值即可。
  • 当目标日期等于起始日期时,两种方法都会返回1(符合起始日属于第1个间隔的逻辑)。

内容的提问来源于stack exchange,提问作者Emman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:35:31