MS-SQL 2008全字匹配

时间:2013-06-07 21:54:31

标签: sql regex sql-server-2008 tsql

我花了几个小时研究这个并且很难​​过,可能是因为我经常使用RegEx表达式。

我希望在Microsoft SQL 2008中的VARCHAR或TEXT类型列中匹配整个单词。

我有一个CLR程序集RegEx Function installed

我需要它来匹配这些示例中的枪:

  • 已加载
  • 加载
  • 我的已加载

而不是在这些情况下:

  • 枪支很棒
  • 我有我的枪
  • 我的枪很棒

我宁愿不去全文搜索路线。

以下是我尝试但失败的一些事情:

WHERE PATINDEX( '%[^a-zA-Z_]' + @keyword + '[^a-zA-Z_]%', name) > 0

...没有考虑字符串开头的单词

WHERE name LIKE '%\b' + @keyword + '\b%'

...不会返回任何内容

WHERE name LIKE '%[^A-Za-z]' + @keyword + '[^A-Za-z]%'

...没有考虑字符串开头的单词

......和其他一些我没有保存的人

我似乎无法依赖http://gskinner.com/RegExr/这样的正则表达式测试人员来帮我解决这个问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

关键是修改name进行比较。只需在开头和结尾添加一个空格,然后您将获得所有单词。例如:

WHERE ' '+name+' ' LIKE '%[^A-Za-z]' + @keyword + '[^A-Za-z]%'

应该做得很好。