2012-01-16 78 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这个变量不会对过滤查询

回答

1

您可以申请ISNULL@dateTo因此它默认为一些非常遥远的未来日期参加,就像30000101

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

但是当你说是空,选择将在该字段上查找空值? – jcvegan 2012-01-16 20:47:10

+0

@JuanCarlosVegaNeira:不,[[ISNULL()'](http://msdn.microsoft.com/zh-cn/library/ms184325.aspx“ISNULL(Transact-SQL)”)仅返回第二个参数,如果第一个参数一个是NULL,否则返回第一个参数。在我的例子中,如果它为NULL,ISNULL为'@ dateTo'提供了一个默认值。所以,如果'@ dateTo' *为* NULL,'submitDate'将被比较为一个非常大的值,这与我们忽略该条件相同,因为它肯定会返回'true'。 – 2012-01-16 21:03:55

+0

这工作正常,谢谢! – jcvegan 2012-01-16 21:36:36

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)'。 – 2012-01-16 20:39:14

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

我已经更新了WHERE您的示例查询的子句,以便记录将被包括在结果如果submitDate为空,或者如果submitDate是@dateFrom和@dateTo

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