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

如何编写SQL语句查询notis表中符合指定日期条件的数据?

需求实现与SQL修正

问题描述

我有一张名为notis的表,字段包括nomborFail(主键,varchar类型)、tarikhNotis2(date类型)、tarikhNotis3(date类型)和status(varchar类型)。需要查询满足以下条件的数据:

  • 当tarikhNotis3不为空时,当前日期晚于tarikhNotis2且早于tarikhNotis3;
  • 当tarikhNotis3为空时,当前日期晚于tarikhNotis2,同时status为'BELUM SELESAI'。

用户尝试的SQL

用户最初编写的SQL语句:

SELECT * FROM notis  
WHERE ((CURRENT_DATE() > tarikhNotis2 AND tarikhNotis3=NULL) OR (CURRENT_DATE() > tarikhNotis2 AND CURRENT_DATE() < tarikhNotis3)) AND status='BELUM SELESAI'

问题分析与修正

你的需求完全可以实现,原SQL存在两处错误:

  1. 空值判断错误:SQL中判断字段是否为空必须使用IS NULL,而非=NULL,因为NULL不属于任何常规值,无法通过普通比较运算符匹配;
  2. 条件范围错误:原语句将status='BELUM SELESAI'设为全局条件,但根据需求,该状态限制仅适用于tarikhNotis3为空的场景,原写法会导致tarikhNotis3不为空时也强制要求状态为'BELUM SELESAI',不符合需求逻辑。

修正后的SQL

SELECT * FROM notis
WHERE 
  (
    -- tarikhNotis3不为空时的判断逻辑
    (tarikhNotis3 IS NOT NULL AND CURRENT_DATE() > tarikhNotis2 AND CURRENT_DATE() < tarikhNotis3)
    OR
    -- tarikhNotis3为空时的判断逻辑
    (tarikhNotis3 IS NULL AND CURRENT_DATE() > tarikhNotis2 AND status = 'BELUM SELESAI')
  )

修正说明

  • 用IS NOT NULL和IS NULL正确识别tarikhNotis3的空值状态;
  • 将status='BELUM SELESAI'限定在tarikhNotis3 IS NULL的分支内,精准匹配需求;
  • 两个分支通过OR连接,分别覆盖两种场景的查询条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:12