我想在表格中进行软字符串匹配,如下所示:
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')
我该怎么做?
答案 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'