我已经搜索了所有关于条件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
答案 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