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

查询含reject date与accept date字段,如何仅筛选最早日期在指定范围的记录?

解决方案:精准筛选符合要求的日期记录

明白了,你想要的其实是只保留两类记录:要么两个日期都落在指定区间里,要么其中一个日期在区间内、另一个完全为空。而要排除那种两个日期都存在,但其中一个在区间外的情况(比如你提到的reject在12/20、accept在1/5的记录)。我给你整理一下对应的查询逻辑和写法:

核心筛选逻辑

我们需要把三种符合要求的情况用OR连接起来:

  • 情况1:reject_date 和 accept_date 都不为空,且两者都在目标日期区间内;
  • 情况2:reject_date 在区间内,且 accept_date 为空;
  • 情况3:accept_date 在区间内,且 reject_date 为空;

具体SQL示例

假设你的表名为records,目标日期区间是'2023-12-01'到'2023-12-31',对应的查询可以写成:

SELECT *
FROM records
WHERE
  -- 两个日期都在区间内
  (reject_date BETWEEN '2023-12-01' AND '2023-12-31'
   AND accept_date BETWEEN '2023-12-01' AND '2023-12-31')
  -- 仅reject date存在且在区间内
  OR (reject_date BETWEEN '2023-12-01' AND '2023-12-31'
      AND accept_date IS NULL)
  -- 仅accept date存在且在区间内
  OR (accept_date BETWEEN '2023-12-01' AND '2023-12-31'
      AND reject_date IS NULL);

效果验证

  • 对于你提到的那条reject_date='2023-12-20'、accept_date='2024-01-05'的记录:因为它的accept_date不在区间内,且两个日期都不为空,所以不会被筛选出来,正好符合你的排除需求;
  • 对于只有reject_date(比如'2023-12-15')、accept_date为空的记录:会被正常包含;
  • 对于两个日期都在12/1-12/31内的记录:也会被保留。

可选简化写法(适合熟悉函数的场景)

如果你的数据库支持COALESCE和条件判断,也可以用更简洁的逻辑表达“所有非空的日期都必须在区间内”:

SELECT *
FROM records
WHERE
  -- 确保至少有一个日期在区间内
  COALESCE(reject_date, accept_date) BETWEEN '2023-12-01' AND '2023-12-31'
  -- 同时确保所有非空日期都在区间内
  AND (reject_date IS NULL OR reject_date BETWEEN '2023-12-01' AND '2023-12-31')
  AND (accept_date IS NULL OR accept_date BETWEEN '2023-12-01' AND '2023-12-31');

不过第一种写法更直观,容易理解和维护,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:51