SQL条件编写求助:根据日期字段非空状态设置查询条件
编写目标SQL条件
直接给你两种可行的写法,按需选择:
写法一:逻辑分支判断
这种写法通过AND和OR组合拆分逻辑,可读性强:
SELECT * FROM Table1 JOIN Table2 ON Table2.ID = Table1.Table2_iD WHERE *conditions* AND ( -- Table1.Date不为空时,判断自身是否在区间内 (Table1.Date IS NOT NULL AND Table1.Date BETWEEN date1 AND date2) -- Table1.Date为空时,用Table2.Date加2个月后判断 OR (Table1.Date IS NULL AND DATEADD(month, 2, Table2.Date) BETWEEN date1 AND date2) )
写法二:CASE表达式
用CASE统一处理日期后再判断区间,逻辑更紧凑:
SELECT * FROM Table1 JOIN Table2 ON Table2.ID = Table1.Table2_iD WHERE *conditions* AND CASE WHEN Table1.Date IS NOT NULL THEN Table1.Date ELSE DATEADD(month, 2, Table2.Date) END BETWEEN date1 AND date2
注意不同数据库的日期函数差异
- MySQL/MariaDB:替换
DATEADD(month, 2, Table2.Date)为DATE_ADD(Table2.Date, INTERVAL 2 MONTH) - PostgreSQL:替换为
Table2.Date + INTERVAL '2 months' - Oracle:替换为
ADD_MONTHS(Table2.Date, 2)
内容的提问来源于stack exchange,提问作者hellsmenser
相关产品推荐
相关产品推荐

