私は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)))
それは間違っています。誰でも正確な声明を組み立てるのを手伝うことができます。ありがとう!
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);
この例では、スコープを変更して、複雑なブールロジックの異なる変数の述語を使用する別のスコープに変更できることに注意してください。異なるデータ型を調べる必要がある場合は、別の方法でキャストする必要があります。別の行を追加し、8のintと「繰り返し」に類似したテキストの参照を指定したい場合、最初の変数の「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%')
is nullは、COALESCEが役に立たない場合に、このようなことに使用する構文です。
試してください:
if (@zipCode is null)
begin
([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)
end
else
begin
([Portal].[dbo].[Address].PostalCode=@zipCode )
end
ケースステートメントを試す
WHERE
CASE WHEN @zipCode IS NULL THEN 1
ELSE @zipCode
END
if((PID = @ pidおよびPageNumber = 5のPageImageからVisitCountを選択)NULL = @ pidおよびPageNumber = @ pageno end
is nullは、次の例のように、クエリから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;