在Where子句中控制流语句

时间:2015-06-23 15:28:50

标签: sql sql-server

我是根据过滤条件的where子句中使用的几个参数从表中获取数据。参数是天数和客户名称(@days和@customer名称)。以下是我想要实现的目标。

  1. 如果用户输入天数,那么它应该从当前日期到输入日期获取数据,如果用户没有给该参数赋值,则默认情况下应该在当前日期之前5天。例如,让我们说用户传递值@ day = 6然后过滤条件将是:
  2. where lastupdateddate between getdate() - 6

    如果用户未将任何值传递给参数,则应采用默认的5天

    where lastupdateddate between getdate() - 5
    
    1. 如果用户提供客户名称,则应在where子句中使用该名称。如果客户没有传递任何名称,那么它应该返回列中可用的所有客户作为默认值。

2 个答案:

答案 0 :(得分:0)

您真的没有提供足够的信息以获得良好的答案,但您应该可以使用您正在使用的任何SQL变体的空合并运算符来执行此操作。

例如)getdate()和getdate()之间的lastupdated - nvl(@ days,5)

对于客户名称,只需合并到列值

其中custname = nvl(@customer,custname)

答案 1 :(得分:0)

尝试以下内容......

更新 - 使用DATEADD()函数

WHERE CustomerName = CASE WHEN @Customer IS NOT NULL THEN @customername ELSE CustomerName END 
AND lastupdateddate BETWEEN getdate() and DATEADD(DAY, ISNULL(@int, 5) * -1,  GETDATE())