2011-11-11 73 views
1
SELECT * 
FROM company_address 
WHERE address_telephone LIKE '%12%' 
AND address_telephone LIKE '%45%' (edit) 

簡短問題:有沒有辦法只使用列名一次?具有多個LIKE的SQL超過1個變量

(編輯:這是一個例子,遺憾的是..)

+1

好像沒有理由有LIKE '%12%'。爲什麼不只喜歡「%125%」? – abresas

回答

0

簡短的回答:沒有

附註:我不知道查詢您的業務規則,但它看起來像你可能想要使用OR而不是AND

長答案:如果是平等,可以使用IN。但是,由於您使用的是LIKE,因此您必須指定每個LIKE條件。

+0

謝謝..猜猜這將是一個長查詢然後.. – Sem

2

您的條款有問題。 address_telephone不能爲LIKE '%12%'也不是LIKE '%125%'因此無論如何只有第二個是必要的。

如果這僅僅是一個例子情況下,你實際上並沒有打算說WHERE邏輯,REGEXP可能會爲你的工作情況:

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

+1:羞愧'REGEXP'不比通配LIKE'比較的左側更好地執行。 –

+0

@OMGPonies完全同意。 –

+0

對不起,在那裏犯了一個錯誤......在這種情況下你會做什麼? – Sem

0
在你的榜樣

,是:

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

解釋如果address_telephone LIKE '%125%'爲真 則address_telephone LIKE '%12%'也必須是真,因此不需要將其添加到查詢中。

0

通常可以使用通配符等將多個喜歡組合成一個語句。請參閱下面的一個簡單的例子

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

編輯:返回「真」,順便

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 + '%'