【问题标题】:How to remove statements from where clause in SQL如何从 SQL 中的 where 子句中删除语句
【发布时间】:2014-10-14 15:52:02
【问题描述】:
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”可以为空。如果该值带有值“”,我该如何从 WHERE 子句中删除它?

【问题讨论】:

    标签: sql sql-function


    【解决方案1】:

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

    where valid = @selectValid
    

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

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

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

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

    希望对您有所帮助。

    【讨论】:

    • 先生,您刚刚挽救了我的工作。非常感谢
    【解决方案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+'%'
    )
    

    【讨论】:

      【解决方案3】:
      where (valid = @selectValid
          or valid is null)
      

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

      (根据您使用的 DBMS,将​​ null 替换为 null、!= null 等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-14
        • 2020-03-26
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        相关资源
        最近更新 更多