在SQL Server中是否存在条件运算符?

时间:2013-11-11 17:13:10

标签: sql-server tsql conditional-operator query-parameters

我有以下SQL代码片段,我想通过操纵@Customer参数的值来选择所有客户的销售。有没有办法在SQL Server 2008 R2中执行此操作?我已经尝试设置@Customer ='%'但显然由于没有LIKE运算符而无效。

我只想操纵参数,因为在其他时候我会这样做 需要只选择一个客户。是否有在WHERE子句中使用IF / ELSE的东西?

DECLARE @Customer varchar(5) = ''

SELECT *
FROM SalesData
WHERE Customer=@Customer

3 个答案:

答案 0 :(得分:1)

  

是否存在在WHERE子句中使用IF / ELSE

的事情

当然,there is a CASE expression - 不仅在WHERE子句中,而且在查询的其他部分中。但是,更常见的方法是在WHERE子句中使用逻辑表达式,强制SQL Server根据参数设置采用一种条件。

  

我的情况是if @Customer = '' then select all

如果您希望在参数设置为空时选择所有客户,或者选择未设置参数的所有客户,则可以执行以下操作:

SELECT *
FROM SalesData
WHERE @Customer = ''
   OR  Customer = @Customer

如果@Customer设置为'',则所有行的OR表达式的第一个子句将为TRUE,因此将返回所有客户。但是,当@Customer非空时,表达式的第二部分将被评估。

答案 1 :(得分:1)

不太确定您需要如何执行搜索

但可以尝试下面的内容

SELECT *
FROM SalesData
WHERE Customer like '%' + @Customer + '%'

SELECT *
FROM SalesData
WHERE (LEN(@Customer)>0 AND Customer =@Customer)
     OR (LEN(@Customer)=0)

在这里我没有trim假设你总是通过''。但您始终可以使用LEN(LTRIM(RTRIM(@Customer)))

答案 2 :(得分:1)

如果您将@Customer默认为NULL而不是'',那么您可以

WHERE Customer = ISNULL(@Customer, Customer)