具有多个LIKE超过1个变量的SQL

时间:2011-11-11 15:05:48

标签: mysql sql

SELECT *
FROM company_address
WHERE address_telephone LIKE '%12%'
AND address_telephone LIKE '%45%' (edit)

简短问题:有没有办法只使用一次列名?

(编辑:这是一个例子,对不起......)

6 个答案:

答案 0 :(得分:3)

如果您真的想在一次搜索中执行此操作,可以将搜索条件放入表变量并对其进行通配符连接:

DECLARE @t table (s varchar(20))
insert into @t values('12')
insert into @t values('45')

select ca.* from company_address ca inner join
@t t on ca.address_telephone like '%' + t.s + '%'

答案 1 :(得分:2)

你的条款有缺陷。 address_telephone LIKE '%12%'不能成为LIKE '%125%',因此无论如何只需要其中的第二个。

如果这只是一个示例,并且您实际上没有打算WHERE逻辑,REGEXP可能适用于您的情况:

WHERE address_telephone REGEXP '^.*125[0-9]+$' 

答案 2 :(得分:0)

简答:否

附注:我不知道您的查询业务规则,但看起来您可能希望使用OR代替AND

答案很长:如果是平等的话,你可以使用IN。但是,由于您使用的是LIKE,因此您必须指定每个LIKE条件。

答案 3 :(得分:0)

在你的例子中,是的:

SELECT *
FROM company_address
WHERE address_telephone LIKE '%125%'

解释

如果address_telephone LIKE '%125%'为真 那么address_telephone LIKE '%12%'也必须是真的,所以不需要将它添加到查询

答案 4 :(得分:0)

您通常可以使用通配符等将多个喜欢组合成一个语句。请参阅下面的一个简单示例

declare @test varchar(50)    
set @test = '123456789'    
select 'true' where @test like '123%456%9'

编辑:顺便说一下,返回'true'

答案 5 :(得分:0)

也许您正在寻找Levenshtein distance功能?它应该允许你进行模糊搜索。有一个here