SQL Server条件where子句

时间:2018-06-28 19:58:13

标签: sql sql-server

我有以下以以下内容开头的where子句:

DECLARE @Birthdate = 1

SELECT ... 
FROM ... 
JOIN ...
WHERE A.organization_id = 1
  AND LEFT(A.[first_name], 3) = LEFT(B.[first_name], 3)
  AND LEFT(A.[last_name], 3) = LEFT(B.[last_name], 3)

此后,我想有条件地执行其他子句。

例如:

  • 如果@Birthdate = 1,然后添加AND A.[birthdate] = B.[birthdate]
  • 否则,不要添加任何内容

我尝试了以下方法,但似乎都无法正常工作:

示例1:

 AND (@Birthdate = 1 AND A.[birthdate] = B.[birthdate])

Ex 2:

AND ((@Birthdate = 1 AND A.[birthdate] = B.[birthdate]) OR 
     (@Birthdate = 0 AND (A.[birthdate] = B.[birthdate] OR 
                          A.[birthdate] <> B.[birthdate])))

关于我在做什么错的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您可以使用or来应用过滤器,或者仅在@Birthdate = 0时返回所有行

SELECT
    ...
FROM
    ...
WHERE
    (
        -- Apply the filter if applicable
        (
            @Birthdate = 1
            and A.[birthdate] = B.[birthdate]
        )
        -- Or return everything
        or @Birthdate <> 1
    )