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

如何在PostgreSQL的WHERE子句中实现带IF逻辑的条件查询

实现PostgreSQL WHERE子句中的条件逻辑

要满足你描述的筛选需求,我们可以把两个条件组合成一个清晰的WHERE子句,核心是用**逻辑与(AND)和逻辑或(OR)**来嵌套处理条件2的分支逻辑。

最终SQL查询语句

SELECT *
FROM order_tbl
WHERE 
  date_col_1 >= CURRENT_DATE - INTERVAL '1 day'
  AND (date_col_1 <= CURRENT_DATE OR date_col_2 > CURRENT_DATE);

逻辑拆解

我们把需求拆成两部分来看:

  1. 基础筛选条件:date_col_1 >= CURRENT_DATE - INTERVAL '1 day'
    • 这里用CURRENT_DATE获取当前日期(对应你的测试值2018-01-23),减去1天得到2018-01-22,确保只保留date_col_1在这个日期及之后的记录。
  2. 分支条件处理:(date_col_1 <= CURRENT_DATE OR date_col_2 > CURRENT_DATE)
    • 当date_col_1 <= 当前日期时,不需要检查date_col_2,直接符合要求;
    • 当date_col_1 > 当前日期时,必须满足date_col_2 > 当前日期才会被选中。

测试数据验证(当前日期2018-01-23)

我们逐个看测试数据的筛选结果:

  • 记录1:date_col_1=2018-01-21 → 不满足基础条件,被排除
  • 记录2:date_col_1=2018-01-22 ≥2018-01-22,且date_col_1≤2018-01-23 → 选中
  • 记录3:date_col_1=2018-01-21 → 不满足基础条件,被排除
  • 记录4:date_col_1=2018-01-23 ≥2018-01-22,且date_col_1≤2018-01-23 → 选中
  • 记录5:date_col_1=2018-01-24 >2018-01-23,date_col_2=2018-01-24 >2018-01-23 → 选中
  • 记录6:date_col_1=2018-01-21 → 不满足基础条件,被排除
  • 记录7:date_col_1=2018-01-25 >2018-01-23,但date_col_2=2018-01-22 ≤2018-01-23 → 被排除
  • 记录8:date_col_1=2018-01-26 >2018-01-23,date_col_2=2018-01-26 >2018-01-23 → 选中

最终会选中的记录是order_id为2、4、5、8的四条数据。

补充说明

如果你的当前日期是固定值(比如测试时的2018-01-23),也可以把CURRENT_DATE替换成具体日期字符串,比如:

SELECT *
FROM order_tbl
WHERE 
  date_col_1 >= '2018-01-23'::DATE - INTERVAL '1 day'
  AND (date_col_1 <= '2018-01-23'::DATE OR date_col_2 > '2018-01-23'::DATE);

效果是一样的,适合测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:54