SQL Server 条件 where 子句

标签 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.[出生日期] = B.[出生日期]
  • 否则,请勿添加任何内容

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

示例 1:

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

示例 2:

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

对于我做错了什么有什么建议吗?

最佳答案

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

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

关于SQL Server 条件 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090423/

相关文章:

php - mySQl,查询 : How to customize selection from database?

mysql - 复制所有行并更改但更改 store_id

sql - 使用单个 .sql 脚本文件创建多个表

sql-server - 从 sql 中的长时间格式获取小时和分钟时间的最简单方法?

sql - MySQL ORDER问题

mysql - 无论如何,返回 IN 值的默认结果

sql排除偏移行

c# - 在搜索中输入空值的 SQL 多条件查询没有给出任何结果

sql - 不同语言的不同SQL Server上的语句

sql-server - 我可以将 select 语句中的 select 转换为自连接吗?