2010-09-23 40 views
2

我需要這回,同時仍然能夠使用通配符精確匹配。SQL替代爲「碳水化合物」搜索時想回到完全匹配(即?

所以我想返回一個值如「賽車碳水化合物」 但我不希望返回一個值,如「賽車化油器」

這是我現在有...

SELECT I.SKU, I.[Description] 
FROM Inventory AS I 
INNER JOIN MisspelledWords AS M 
ON I.[Description] like '%' + M.[Word] + '%' 
+0

我不知道我明白這個問題,但你有沒有嘗試過不喜歡而不是喜歡?這是否給你你想要的東西? – 2010-09-23 18:57:38

+0

此查詢匹配包含該值的字符串的任何部分,即'化油器'將返回'carb' – user455100 2010-09-23 18:58:58

+0

搜索。但我只想用'carb'這個確切的詞來得到結果 – user455100 2010-09-23 18:59:26

回答

2

試試這個:

ON I.[Description] like '%[^a-z]' + M.[Word] + '[^a-z]%' 

更新

declare @word varchar(100) 
set @word = 'carb' 

select 1 
where 'Racing Carburetor' like '%[^a-z]' + @word + '[^a-z]%' 

沒有返回值,這意味着 '賽車化油器' 是沒有得到選擇。

更新2

declare @searchWord varchar(100), @tableWord varchar(100) 
select @searchWord = 'carburetor' 
,@tableWord = 'Racing Carburetor' 

select 1 
where @tableWord like '%[^a-z]' + @searchWord + '[^a-z]%' 
or @tableWord like @searchWord + '[^a-z]%' 
or @tableWord like '%[^a-z]' + @searchWord 

這一個涉及邊際案件。

+0

謝謝,但我alraedy試過這個,它返回相同的結果 – user455100 2010-09-23 19:01:00

+0

謝謝,這是返回更少的記錄! – user455100 2010-09-23 19:07:49

+0

你是否可以更新查詢來處理單詞congaing數字。例如,當查詢選擇1時,如果'Racing Carb9 uretor'like'%[^ a-z]'+ @word +'[^ a-z]%',這仍然會返回1。但實際上它不應該像我們的搜索詞只是「碳水化合物」 – 2013-08-08 04:17:51

0

說不上關於MySQL或MS-SQL,但是你可以在oracle中使用regexp_like函數。

0

嘗試

(field like '%carb' or field like '%carb %')

這將匹配racing carbcarb for racing但不racing carburatorcarburator for racing