在SQL Select语句中有条件地将AND附加到where子句

时间:2015-04-24 19:39:52

标签: sql sql-server

我已经搜索了所有关于条件where clauses的问题但没有关于有条件地将and件附加到where clause上的问题。我不是一个sql /数据库的人,我来自另一个IT区域,他被扔进了一个"去尝试修复它"今天的问题,因为我们的常规数我有基本的编程概念和知识,但sql对我来说只是一个外国动物。

我有一个简单的:

SELECT abc FROM table WHERE sdate=@somedt

但我需要补充一下:

AND otherdt=@otherdt

但仅当@otherdt不为空时。如果它为null,我根本不想添加AND部分。我已经尝试了几种方法来做到这一点,但它一直给我一个错误。任何帮助表示赞赏。这是我最后一次不成功的尝试:

SELECT abc FROM table 
WHERE sdate=@somedt
IF @otherdt IS NOT NULL
BEGIN
AND otherdt=@otherdt
END

4 个答案:

答案 0 :(得分:2)

SELECT abc FROM table 
WHERE sdate = @somedt AND (@otherdt IS NULL OR otherdt = @otherdt)

答案 1 :(得分:1)

您可以使用以下条件:

SELECT abc FROM table 
WHERE sdate=@somedt AND (@otherdt IS NULL OR otherdt = @otherdt)

答案 2 :(得分:0)

DECLARE @Sql NVARCHAR(MAX)
       ,@somedt DATETIME 
       ,@otherdt DATETIME

SET @Sql = N' SELECT abc 
              FROM table 
              WHERE sdate = @somedt '
        + CASE WHEN  @otherdt IS NOT NULL 
                 THEN N' AND otherdt = @otherdt'
             ELSE N'' END

Exec sp_executesql @Sql 
                  ,N'@somedt DATETIME , @otherdt DATETIME'
                  ,@somedt
                  ,@otherdt

答案 3 :(得分:0)

您可以使用UNION,这在许多情况下的效果优于OR

SELECT abc FROM table
WHERE sdate=@somedt AND @otherdt IS NULL
UNION
SELECT abc FROM table
WHERE sdate=@somedt AND otherdt = @otherdt