SQL使用Like,One Variable,Multiple Columns

时间:2017-07-05 23:22:26

标签: sql

--where 'email@aol.com' in(o.SuOrderEmailAddress, o.SuBusEmailAddress, o.SuReturnEmail, O.SuPartsEmail) and es.ictid = 7

我想在多列中搜索一个变量(电子邮件地址)。这就是我现在所拥有的,它的确有效。

我想我需要使用Like,因为我想使用通配符。例如,能够使用*@aol.com非常有帮助。现在我必须输入一个确切的电子邮件地址。

--Where s.suname like 'rizt%'and es.ictid = 7

在上面的示例中这很简单,但是一旦我重新排列语法以执行多个列,我就会丢失到可以使用LIKE的位置,以便我可以使用通配符。

由于

3 个答案:

答案 0 :(得分:0)

您只需查看电子邮件地址的末尾即可。大多数数据库都支持right()函数:

where '@aol.com' in (right(o.SuOrderEmailAddress, 8),
                     right(o.SuBusEmailAddress, 8),
                     right(o.SuReturnEmail, 8),
                     right(o.SuPartsEmail, 8) 
                    ) and
       es.ictid = 7

(通常,即使没有right()的数据库也具有等效功能。)

某些数据库支持正则表达式,这是另一种选择。或者,在您的情况下,字符串连接甚至可以工作。

编辑:

如果你有变量,你可以这样做:

where @var in (right(o.SuOrderEmailAddress, len(@var)),
               right(o.SuBusEmailAddress, len(@var)),
               right(o.SuReturnEmail, len(@var)),
               right(o.SuPartsEmail, len(@var)) 
              ) and
       es.ictid = 7

答案 1 :(得分:0)

我认为真正的答案是使用全文索引(如果您使用的是MS SQL - 否则会查看您使用的服务器是否存在等效项)。但是,这是一个应该有效的丑陋黑客:

WHERE ISNULL(o.SuOrderEmailAddress, '') + '|' 
      + ISNULL(o.SuBusEmailAddress, '') + '|' 
      + ISNULL(o.SuReturnEmail, '') + '|' 
      + ISNULL(O.SuPartsEmail, '') LIKE @pattern

在检查@pattern的连接字符串之前,这只是简单地将所有相关字段连接到一个以管道分隔的列表。

答案 2 :(得分:0)

这是一般的想法。通常,@ search将是存储过程的参数。首先查看WHERE子句。

    declare @search varchar(50) = '@aol.com'

    set @search = '%' + @search + '%'

    select case when o.SuOrderEmailAddress like @search then o.SuOrderEmailAddress
                when o.SuBusEmailAddress like @search then o.SuBusEmailAddress 
                when o.SuReturnEmail like @search then o.SuReturnEmail
                when o.SuPartsEmail like @search end as matchedEmail    
    from MyTable as o
    where (o.SuOrderEmailAddress like @search
           or o.SuBusEmailAddress like @search
           or o.SuReturnEmail like @search
           or o.SuPartsEmail like @search) and ...

您可以控制前端添加'%'。在我看来,这是为读者写的清楚,并为您提供了匹配的电子邮件地址。