Kri*_*shh 7 sql t-sql sql-server case sql-server-2008
我试图在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
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
WHERE ((@zipCode IS NOT NULL AND ([Portal].[dbo].[Address].PostalCode=@zipCode)) OR (@zipCode IS NULL AND ([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)))
Run Code Online (Sandbox Code Playgroud)
这是错的.任何人都可以帮助构建确切的声明.谢谢!
小智 13
null是我用于此类事情的语法,当COALESCE没有帮助时.
尝试:
if (@zipCode is null)
begin
([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)
end
else
begin
([Portal].[dbo].[Address].PostalCode=@zipCode )
end
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
对于您的示例,请记住,您可以将范围更改为另一个谓词,其中谓词来自复杂布尔逻辑的不同变量.如果您需要检查不同的数据类型,则只需要注意不同的方法.因此,如果我添加另一行但希望指定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%')
Run Code Online (Sandbox Code Playgroud)