复杂AND / OR的案例陈述无法正常工作

问题描述

| 我期望它返回\'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 \')     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...