在谷歌的帮助下,我得到了如下所示的 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)
但这似乎没有用。
答案似乎是:您不必这样做。两个相等值上的
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
我需要评论测试还是不言自明?