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

求编写WHERE子句:筛选今日与date_column差值在10-15天的数据

实现日期差值筛选的几种SQL写法

嘿,这个需求其实挺常见的,不用非得单独创建变量也能轻松搞定,当然用变量的方案也完全可行,我给你两种思路都梳理一下:

直接在WHERE子句中计算(最直观)

这种方式适合单次查询,不需要复用日期或差值条件的场景,不同数据库的写法略有区别:

MySQL/MariaDB

SELECT *
FROM your_table
-- 两种写法等价,选你看着舒服的就行
WHERE DATEDIFF(CURDATE(), date_column) > 10 
  AND DATEDIFF(CURDATE(), date_column) < 15;

-- 或者用BETWEEN(注意是闭区间,所以要写11到14)
WHERE DATEDIFF(CURDATE(), date_column) BETWEEN 11 AND 14;

DATEDIFF(a, b)会返回a - b的天数差,CURDATE()获取当前日期(不含时间)。

PostgreSQL

SELECT *
FROM your_table
WHERE CURRENT_DATE - date_column > INTERVAL '10 days'
  AND CURRENT_DATE - date_column < INTERVAL '15 days';

-- 或者转成整数天数判断
WHERE (CURRENT_DATE - date_column)::INTEGER > 10
  AND (CURRENT_DATE - date_column)::INTEGER < 15;

SQL Server

SELECT *
FROM your_table
WHERE DATEDIFF(day, date_column, GETDATE()) > 10
  AND DATEDIFF(day, date_column, GETDATE()) < 15;

这里DATEDIFF(day, 早日期, 晚日期)返回天数差,GETDATE()会带时间,如果只需要日期部分,可以换成CAST(GETDATE() AS DATE)。

使用变量的方案(更灵活)

如果后续需要频繁调整差值范围,或者多个查询要用到相同的日期/差值条件,用变量会更方便,以MySQL为例:

-- 定义变量
SET @today = CURDATE();
SET @min_day_diff = 10;
SET @max_day_diff = 15;

-- 查询时复用变量
SELECT *
FROM your_table
WHERE DATEDIFF(@today, date_column) > @min_day_diff
  AND DATEDIFF(@today, date_column) < @max_day_diff;

小提醒

  • 确保date_column是日期类型(比如DATE、DATETIME),如果是字符串类型,先转成日期再计算,否则会出现错误结果。
  • 如果你的数据库是Oracle、SQLite等其他方言,可以告诉我,我再给你适配对应的写法~

内容的提问来源于stack exchange,提问作者Spencer B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:19