where子句上的Sql条件语句

where子句上的Sql条件语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想使用条件进行查询,以选择用于筛选的子句。 像这样的 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 选择Id、姓名、姓氏、提交日期、最后访问日期

我想使用条件进行查询,以选择用于筛选的子句。 像这样的

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
选择Id、姓名、姓氏、提交日期、最后访问日期
如果(submitDate不为空)开始submitDate>=@dateFrom结束,则从访问者开始
如果(submitDate不为null),则开始submitDate<@dateTo-end
但我需要例如,如果
@dateTo为null
此变量不参与筛选查询

从访问者中选择*,其中(submitDate为null或submitDate>=@dateFrom)和(submitDate为null或submitDate<@dateTo)
select * from Visitor where (submitDate is null or submitDate >= @dateFrom) and (submitDate is null or submitDate < @dateTo)
从访问者中选择*,其中(submitDate为null或submitDate>=@dateFrom)和(submitDate为null或submitDate<@dateTo)
其中(submitDate为空或(submitDate>=@dateFrom和submitDate<@dateTo))
其中(submitDate为空或(submitDate>=@dateFrom和submitDate<@dateTo))

您可以将
ISNULL
应用于
@dateTo
,从而将其默认为某个非常遥远的未来日期,如
3000001

…
WHERE submitDate IS NULL
   OR submitDate >= @dateFrom AND submitDate < ISNULL(@dateTo, '30000101')
…
其中submitDate为NULL
或者submitDate>=@dateFrom和submitDate
您可以将
ISNULL
应用于
@dateTo
,从而将其默认为某个非常遥远的未来日期,如
3000001

…
WHERE submitDate IS NULL
   OR submitDate >= @dateFrom AND submitDate < ISNULL(@dateTo, '30000101')
…
其中submitDate为NULL
或者submitDate>=@dateFrom和submitDate
我已经更新了示例查询的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))
选择Id、姓名、姓氏、提交日期、最后访问日期
来客
其中(submitDate为空)或((submitDate>=@dateFrom)和(submitDate<@dateTo))

我已经更新了示例查询的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))
选择Id、姓名、姓氏、提交日期、最后访问日期
来客
其中(submitDate为空)或((submitDate>=@dateFrom)和(submitDate<@dateTo))

(A或B)和(A或C)=A或(B和C)
。因此,您的建议相当于
submitDate为空或(submitDate>=@dateFrom和submitDate<@dateTo)
(A或B)和(A或C)=A或(B和C)
。因此,您的建议相当于
submitDate为null或(submitDate>=@dateFrom和submitDate<@dateTo)
。但当您说is null时,select将在该字段中查找null值?@juancarlosveganiera:否,如果第一个参数为null,则仅返回第二个参数,否则返回第一个参数。在我的示例中,ISNULL有效地为
@dateTo
提供了一个默认值,以防它为NULL。因此,如果
@dateTo
为空,
submitDate
将与一个非常大的值进行比较,这与我们忽略该条件相同,因为它肯定会返回
true
。但是当您说为空时,select将在该字段上查找空值?@JuanCarlosVegaNeira:No,如果第一个参数为NULL,则仅返回第二个参数,否则返回第一个参数。在我的示例中,ISNULL有效地为
@dateTo
提供了一个默认值,以防它为NULL。因此,如果
@dateTo
为空,
submitDate
将与一个非常大的值进行比较,这与我们忽略该条件相同,因为它肯定会返回
true