我正在尝试在sql中的WHERE子句中实现类似下面的内容。
if (@zipCode ==null)
begin
([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)
end
else if(@zipCode !=null)
begin
([Portal].[dbo].[Address].PostalCode=@zipCode )
end
我尝试了以下内容:
WHERE ((@zipCode IS NOT NULL AND ([Portal].[dbo].[Address].PostalCode=@zipCode)) OR (@zipCode IS NULL AND ([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)))
这是错误的。任何人都可以帮助构建确切的声明。谢谢!
答案 0 :(得分:12)
为null是我用于此类事情的语法,当COALESCE没有帮助时。
尝试:
if (@zipCode is null)
begin
([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)
end
else
begin
([Portal].[dbo].[Address].PostalCode=@zipCode )
end
答案 1 :(得分:8)
为这种事情内置了Isnull()语法。
declare @Int int = null;
declare @Values table ( id int, def varchar(8) )
insert into @Values values (8, 'I am 8');
-- fails
select *
from @Values
where id = @Int
-- works fine
select *
from @Values
where id = isnull(@Int, 8);
对于您的示例请记住,您可以将范围更改为另一个谓词,其中谓词来自复杂布尔逻辑的不同变量。如果您需要检查不同的数据类型,则只需要注意不同的方法。因此,如果我添加另一行但希望指定int为8并且还有类似于'repeat'的文本引用,我可以使用引用再次返回第一个变量的'isnull'但返回完全不同的结果数据类型对不同领域的不同引用。
declare @Int int = null;
declare @Values table ( id int, def varchar(16) )
insert into @Values values (8, 'I am 8'), (8, 'I am 8 repeat');
select *
from @Values
where id = isnull(@Int, 8)
and def like isnull(cast(@Int as varchar), '%repeat%')
答案 2 :(得分:1)
尝试案例陈述
WHERE
CASE WHEN @zipCode IS NULL THEN 1
ELSE @zipCode
END
答案 3 :(得分:0)
为null可用于检查空数据是否来自查询,如下例
declare @Mem varchar(20),@flag int
select @mem=MemberClub from [dbo].[UserMaster] where UserID=@uid
if(@Mem is null)
begin
set @flag= 0;
end
else
begin
set @flag=1;
end
return @flag;
答案 4 :(得分:0)
如果((从PageImage中选择VisitCount,其中PID = @ pid和PageNumber = 5)为NULL) 开始 更新PageImage设置 VisitCount = 1 其中PID = @ pid和PageNumber = @ pageno 结束 其他 开始 更新PageImage设置 VisitCount = VisitCount + 1 其中PID = @ pid和PageNumber = @ pageno 结束