如何从SQL中的where子句中删除语句

时间:2014-10-14 15:52:03

标签: sql sql-function

CREATE FUNCTION [dbo].[GetSalesByParameters] 
(   
    @firstName varchar(70),
    @lastName varchar(70),
    @dateFrom datetime,
    @dateTo datetime,
    @selectValid varchar(70),
    @selectCallCenters varchar(70)
)
RETURNS TABLE 
AS
RETURN 
(
    select * from Sales 
    where valid = @selectValid
    and firstName LIKE '%'+@firstName+'%'
)

我正在尝试创建一个能够将所有销售额存储在Sales表中的函数,但有时候参数“selectvalid”可以为null。如果该值带有值“”,我该怎么做才能从WHERE子句中删除它?

3 个答案:

答案 0 :(得分:3)

如果@selectValid的值为空字符串时应忽略,则只需更改以下行:

where valid = @selectValid

where (@selectValid = '' OR valid = @selectValid)

关于if @selectValid是空字符串还是null,问题有点模棱两可。如果您想处理这两种情况,请尝试:

where (@selectValid IS NULL OR @selectValid = '' OR valid = @selectValid)

通常我会使用这种方法,但是如果您正在处理大型表或使用此方法遇到性能问题,那么您可能需要在此处阅读一下:

希望有所帮助。

答案 1 :(得分:2)

CREATE FUNCTION [dbo].[GetSalesByParameters] 
(   
    @firstName varchar(70),
    @lastName varchar(70),
    @dateFrom datetime,
    @dateTo datetime,
    @selectValid varchar(70),
    @selectCallCenters varchar(70)
)
RETURNS TABLE 
AS
RETURN 
(
    select * from Sales 
    where (@selectValid IS NULL OR valid = @selectValid)
    and firstName LIKE '%'+@firstName+'%'
)

答案 2 :(得分:1)

where (valid = @selectValid
    or valid is null)

where (valid = @selectValid
    or @selectValid is null)

(取而代之的是<> null,!= null等取决于您使用的DBMS)