我需要帮助在 SQL 中一起使用 WHERE、CASE 和 BETWEEN

问题描述 投票:0回答:1

在谷歌的帮助下,我得到了如下所示的 where 语句,但我正在使用的程序说这是错误的,但没有告诉我哪里出了问题,并且在有人问我为什么做我正在做的事情之前,客户想要选项将日期范围的两端设置为相同的日期,并用该日期信息填充它,只使用 WHERE BETWEEN 不适用。

WHERE Date = Case WHEN @Y1=@Y2 THEN = @Y1 ELSE BETWEEN @Y1 AND @Y2 END

任何帮助表示赞赏。

我也尝试添加额外的 where 子句,例如

(where between y1 and y2 OR date=Y1 or date=Y2)
但这似乎没有用。

sql where-clause case between
1个回答
0
投票

答案似乎是:您不必这样做。两个相等值上的

BETWEEN
谓词返回与相同值一次的 equi 谓词相同的 TRUE/FALSE 答案: 看这个测试:

WITH
indata(dt) AS (
          SELECT DATE '2023-04-01'
UNION ALL SELECT DATE '2023-04-02'
UNION ALL SELECT DATE '2023-04-03'
UNION ALL SELECT DATE '2023-04-04'
UNION ALL SELECT DATE '2023-04-05'
UNION ALL SELECT DATE '2023-04-06'
UNION ALL SELECT DATE '2023-04-07'
UNION ALL SELECT DATE '2023-04-08'
UNION ALL SELECT DATE '2023-04-09'
UNION ALL SELECT DATE '2023-04-10'
)
,
srch(fromdt,todt,descr) AS (
          SELECT DATE '2023-04-01',DATE '2023-04-04','range'
UNION ALL SELECT DATE '2023-04-05',DATE '2023-04-05','equal'
)
SELECT
  dt, descr
FROM indata CROSS JOIN srch
WHERE dt BETWEEN fromdt AND todt
ORDER BY descr,dt;
-- out      dt     | descr 
-- out ------------+-------
-- out  2023-04-05 | equal
-- out  2023-04-01 | range
-- out  2023-04-02 | range
-- out  2023-04-03 | range
-- out  2023-04-04 | range      

我需要评论测试还是不言自明?

© www.soinside.com 2019 - 2024. All rights reserved.