在SQL Select语句中有条件地附加AND到where子句
我已经搜索了所有地方,找到了关于条件在SQL Select语句中有条件地附加AND到where子句,sql,sql-server,Sql,Sql Server,我已经搜索了所有地方,找到了关于条件where子句的问题,但没有找到关于在where子句上有条件地附加和的问题。我不是一个sql/数据库的人,我来自另一个IT领域,因为我们的常规数据库人员已经不在了,我今天陷入了一个“去尝试解决它”的问题。我有基本的编程概念和知识,但对我来说,sql只是一种异类 我有一个简单的建议: SELECT abc FROM table WHERE sdate=@somedt 但我需要补充一点: AND otherdt=@otherdt 但仅当@otherdt不为空时
where子句
的问题,但没有找到关于在where子句
上有条件地附加和
的问题。我不是一个sql/数据库的人,我来自另一个IT
领域,因为我们的常规数据库人员已经不在了,我今天陷入了一个“去尝试解决它”的问题。我有基本的编程概念和知识,但对我来说,sql
只是一种异类
我有一个简单的建议:
SELECT abc FROM table WHERE sdate=@somedt
但我需要补充一点:
AND otherdt=@otherdt
但仅当@otherdt
不为空时。如果为空,我根本不想添加和部分。我试过几种方法,但它总是给我一个错误。感谢您的帮助。这是我最后一次失败的尝试:
SELECT abc FROM table
WHERE sdate=@somedt
IF @otherdt IS NOT NULL
BEGIN
AND otherdt=@otherdt
END
您可以使用以下条件:
SELECT abc FROM table
WHERE sdate=@somedt AND (@otherdt IS NULL OR otherdt = @otherdt)
您可以使用UNION
,它在许多情况下比或
查询性能更好
SELECT abc FROM table
WHERE sdate=@somedt AND @otherdt IS NULL
UNION
SELECT abc FROM table
WHERE sdate=@somedt AND otherdt = @otherdt
啊,谢谢shawnt00和ibiza,它们工作得很好。
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
SELECT abc FROM table
WHERE sdate=@somedt AND @otherdt IS NULL
UNION
SELECT abc FROM table
WHERE sdate=@somedt AND otherdt = @otherdt