我希望这会返回'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 =周六或周日且@WeekEndDay不是周六或周日那么'A'
如果@WeekEndDay =周六或周日且@WeekStartDay不是周六或周日,那么'B'
IF @WeekStartDay和@WeekEndDay BOTH =周六或周日那么'C'
从回答中看起来我的逻辑比我想象的要多得多。
答案 0 :(得分:2)
AND表示当两个条件都为真时,OR表示任一条件为真。
@WeekStartDay
是&#34;星期六&#34;。
@WeekEndDay
是&#34;星期六&#34;。
因此,如果你开始打破它:
A: (TRUE OR FALSE) AND (FALSE OR TRUE) = TRUE AND TRUE = TRUE
A
获胜,因为这是符合您要求的第一个条件。
您必须进一步解释您要做的事情,因为我无法看到我需要做些什么来帮助修复代码。
答案 1 :(得分:2)
将参数值替换为文字给出(对于第一种情况)
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
答案 2 :(得分:1)
(@ WeekEndDay&lt;&gt;'星期六')或(@WeekEndDay&lt;&gt;'星期日')是问题所在。
总是会回归真实。
案例B:与
有同样的问题(@ WeekStartDay&lt;&gt;'星期六')或(@WeekStartDay&lt;&gt;'星期天')