使用'LIKE'和一个充满字符串的'IN'子句

时间:2011-04-05 17:59:30

标签: sql sql-server tsql

我想在表格中进行软字符串匹配,如下所示:

SELECT * FROM emailaddresses where addr in ('john@google.com', 'jim@google.com')

但如果表'JOHN@google.com'中有addr值,我想要返回。

有点像这样:

SELECT * FROM emailaddresses where addr LIKE in ('john@google.com', 'jim@google.com')

我该怎么做?

6 个答案:

答案 0 :(得分:9)

将值放入表中并使用join而不是in子句:

SELECT * FROM emailaddresses as ea
INNER JOIN addresses as a
ON ea.address like '%' + a.address + '%'

答案 1 :(得分:2)

您可以使用LOWER function

SELECT * FROM emailaddresses where LOWER(addr) in ('john@google.com', 'jim@google.com')

将所有addr转换为小写,然后您可以将结果与您想要的结果进行比较。

答案 2 :(得分:1)

请注意,LIKE可以区分大小写或不区分大小写,具体取决于对表达式有效的排序规则,但在您的情况下,您没有指定通配符,因此没有必要使用{ {1}}。

默认的SQL Server安装不区分大小写。

如果您想要一个不区分大小写的比较,因为您有一个区分大小写的数据库,you can cast。我相信这是合适的语法(我从来没有将它用于表达式一侧的IN列表)。

LIKE

SELECT * FROM emailaddresses WHERE addr COLLATE SQL_Latin1_General_CP1_CI_AS IN ( 'john@google.com' COLLATE SQL_Latin1_General_CP1_CI_AS ,'jim@google.com' COLLATE SQL_Latin1_General_CP1_CI_AS ) 的真实案例适用于LIKE

之类的内容

答案 3 :(得分:0)

尝试使用交叉联接到包含您要搜索的电子邮件列表的表:

declare @email table(
email_check nvarchar(500) not null)

insert into @email(email_check)
values('jack@google.com')
insert into @email(email_check)
values('john.@google.com')



select hit, ID, EMAIL_ADDRESS from (
    select CHARINDEX(email_check, lower(EMAIL_ADDRESS)) hit, ID, EMAIL_ADDRESS
    from Table_With_Email_Addresses
    ,@email
) t
where hit > 0

不需要“喜欢”,因为它会解析字符串以找到匹配项。 干杯!

答案 4 :(得分:0)

select * from HotelAmenities_ 
where Pamenities in (
            select distinct(pamenities) 
            from HotelAmenities_ 
            where pamenities like '%Swimming%'
        )

答案 5 :(得分:0)

我们可以使用' LIKE-In'在SQL中一起使用,但风格有些不同,如下所示:

SELECT * 
FROM emailaddresses 
WHERE addr LIKE 'john@google.com' OR addr LIKE 'jim@google.com'