问题描述
|
我期望它返回\'C \'的值,但它返回\'A \'。我似乎无法弄清楚为什么这会不起作用,因为我的逻辑看起来不错。
DECLARE @WeekStartDay varchar(10)
DECLARE @WeekEndDay varchar(10)
SET @WeekStartDay = \'Saturday\'
SET @WeekEndDay = \'Saturday\'
SELECT
CASE
WHEN (
((@WeekStartDay = \'Saturday\') OR (@WeekStartDay = \'Sunday\'))
AND
((@WeekEndDay <> \'Saturday\') OR (@WeekEndDay <> \'Sunday\'))
)
THEN \'A\'
WHEN (
((@WeekEndDay = \'Saturday\') OR (@WeekEndDay = \'Sunday\'))
AND
((@WeekStartDay <> \'Saturday\') OR (@WeekStartDay <> \'Sunday\'))
)
THEN \'B\'
WHEN (
((@WeekEndDay = \'Saturday\') OR (@WeekEndDay = \'Sunday\'))
AND
((@WeekStartDay = \'Saturday\') OR (@WeekStartDay = \'Sunday\'))
)
THEN \'C\'
END AS Result
我的预期功能是:
我正在尝试确定
如果@WeekStartDay =星期六或星期日AND @WeekEndDay不是星期六或星期日,则\'A \'
如果@WeekEndDay =星期六或星期日,而@WeekStartDay不是星期六或星期日,那么\'B \'
如果@WeekStartDay和@WeekEndDay BOTH =周六或周日然后\'C \'
从回应中看来,我的逻辑比我想象的要复杂得多。
解决方法
将参数值替换为文字可得出(对于第一种情况)
WHEN (((\'Saturday\' = \'Saturday\') OR (\'Saturday\' = \'Sunday\'))
AND
(( \'Saturday\' <> \'Saturday\') OR ( \'Saturday\' <> \'Sunday\')))
哪一个
WHEN ((True OR False) AND (False OR True))
哪一个
WHEN (True AND True)
哪一个
WHEN (True)
我觉得你需要
SELECT
CASE WHEN @WeekStartDay IN (\'Saturday\',\'Sunday\') THEN
CASE WHEN @WeekEndDay IN (\'Saturday\',\'Sunday\') THEN
\'C\'
ELSE
\'A\'
END
ELSE
CASE WHEN @WeekEndDay IN (\'Saturday\',\'Sunday\') THEN
\'B\'
ELSE
NULL /*You haven\'t said what should happen here?*/
END
END
AS Result
,AND表示两个条件都为真,或表示两个条件都为真。
@WeekStartDay
是“星期六”。
@WeekEndDay
是“星期六”。
因此,如果您开始将其全部分解:
A: (TRUE OR FALSE) AND (FALSE OR TRUE) = TRUE AND TRUE = TRUE
A
获胜,因为这是满足您要求的第一个条件。
您将不得不进一步解释您要做什么,因为我看不到需要做些什么来帮助修复代码。
,(@WeekEndDay <> \'Saturday \')或(@WeekEndDay <> \'Sunday \')是问题所在。
那将永远返回true。
案例B:与
(@WeekStartDay <> \'Saturday \')或(@WeekStartDay <> \'Sunday \')