2012-01-16 20 views
1

フィルタに句を選択する条件を使用してクエリを作成したいとします。 このようなものです。where節のSql条件文

SELECT Id,name,last_name,submitDate,lastvisitDate 
from Visitor Where if(submitDate is not null) begin submitDate >= @dateFrom end 
and if(submitDate is not null) begin submitDate < @dateTo end 

が、@dateTo is nullこの変数はあなたが@dateToISNULLを適用するため、いくつかの本当に遠い未来の日付にそれをデフォルトにすることができ、フィルタクエリ

答えて

1

に参加していない場合、私は、例えば必要like 30000101

… 
WHERE submitDate IS NULL 
    OR submitDate >= @dateFrom AND submitDate < ISNULL(@dateTo, '30000101') 
+0

ですが、あなたが言うと、選択はそのフィールドでヌル値を探しますか? – jcvegan

+0

@JuanCarlosVegaNeira:いいえ、['ISNULL()'](http://msdn.microsoft.com/en-us/library/ms184325.aspx "ISNULL(Transact-SQL)")は、最初の1つはNULLで、それ以外の場合は最初の引数を返します。私の例では、ISNULLは、NULLの場合に '@ dateTo'のデフォルト値を効果的に提供します。したがって、 '@ dateTo' *が* NULLの場合、' submitDate'は非常に大きな値と比較されます。これは、真に 'true'を返すため、条件を無視した場合と同じになります。 –

+0

これはうまく動作します、ありがとう! – jcvegan

1
select * from Visitor where (submitDate is null or submitDate >= @dateFrom) and (submitDate is null or submitDate < @dateTo) 
+1

'(AまたはB)および(AまたはC)= A又は間にある場合(BとC) 'と呼びます。したがって、あなたの提案は 'submitDateがnullか(submitDate> = @dateFromとsubmitDate <@dateTo)'と同じです。 –

2
where (submitDate is null or (submitDate >= @dateFrom and submitDate < @dateTo)) 
0

私はWHEREを更新しましたレコードが検索結果に含まれるように、あなたのクエリ例の節は、submitDateがnullである場合、またはsubmitDateは@dateFromと@dateTo

SELECT Id, name, last_name, submitDate, lastvisitDate 
FROM Visitor 
WHERE (submitDate IS NULL) OR ((submitDate >= @dateFrom) AND (submitDate < @dateTo))