【问题标题】:SQL Alternative to Like to return exact matches (ie.?SQL 替代 Like 以返回完全匹配(即?
【发布时间】:2011-04-16 10:40:35
【问题描述】:

我需要它来返回完全匹配,同时仍然能够使用通配符。

所以在搜索“carb”时,我想返回一个值,例如“Racing Carb” 但我不想返回诸如“赛车化油器”之类的值

这就是我现在所拥有的......

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

【问题讨论】:

  • 我不确定我是否理解这个问题,但您是否尝试过 NOT LIKE 而不是 LIKE?这会给你想要的吗?
  • 此查询匹配包含该值的字符串的任何部分,即“carburetor”将返回一个“carb”
  • 搜索。但我只想用确切的词'carb'得到结果

标签: sql match


【解决方案1】:

不知道mysql或ms-sql,但你可以在oracle中使用regexp_like函数。

【讨论】:

    【解决方案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 
    

    这个处理边缘案例。

    【讨论】:

    • 谢谢,但我已经尝试过了,它返回相同的结果
    • 您能否更新查询以处理包含数字的单词。例如,当查询是 select 1 where 'Racing Carb9 uretor' like '%[^a-z]' + @word + '[^a-z]%' 时,这仍然会返回 1。但实际上它不应该,因为我们的搜索词只是“carb”
    【解决方案3】:

    试试

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

    这将匹配 racing carbcarb for racing 但不匹配 racing carburatorcarburator for racing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多