我需要這回,同時仍然能夠使用通配符精確匹配。SQL替代爲「碳水化合物」搜索時想回到完全匹配(即?
所以我想返回一個值如「賽車碳水化合物」 但我不希望返回一個值,如「賽車化油器」
這是我現在有...
SELECT I.SKU, I.[Description]
FROM Inventory AS I
INNER JOIN MisspelledWords AS M
ON I.[Description] like '%' + M.[Word] + '%'
我需要這回,同時仍然能夠使用通配符精確匹配。SQL替代爲「碳水化合物」搜索時想回到完全匹配(即?
所以我想返回一個值如「賽車碳水化合物」 但我不希望返回一個值,如「賽車化油器」
這是我現在有...
SELECT I.SKU, I.[Description]
FROM Inventory AS I
INNER JOIN MisspelledWords AS M
ON I.[Description] like '%' + M.[Word] + '%'
試試這個:
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
這一個涉及邊際案件。
謝謝,但我alraedy試過這個,它返回相同的結果 – user455100 2010-09-23 19:01:00
謝謝,這是返回更少的記錄! – user455100 2010-09-23 19:07:49
你是否可以更新查詢來處理單詞congaing數字。例如,當查詢選擇1時,如果'Racing Carb9 uretor'like'%[^ a-z]'+ @word +'[^ a-z]%',這仍然會返回1。但實際上它不應該像我們的搜索詞只是「碳水化合物」 – 2013-08-08 04:17:51
說不上關於MySQL或MS-SQL,但是你可以在oracle中使用regexp_like函數。
嘗試
(field like '%carb' or field like '%carb %')
這將匹配racing carb
和carb for racing
但不racing carburator
或carburator for racing
。
我不知道我明白這個問題,但你有沒有嘗試過不喜歡而不是喜歡?這是否給你你想要的東西? – 2010-09-23 18:57:38
此查詢匹配包含該值的字符串的任何部分,即'化油器'將返回'carb' – user455100 2010-09-23 18:58:58
搜索。但我只想用'carb'這個確切的詞來得到結果 – user455100 2010-09-23 18:59:26