MS-SQL 2008全字匹配

MS-SQL 2008全字匹配,sql,regex,sql-server-2008,tsql,Sql,Regex,Sql Server 2008,Tsql,我花了几个小时研究这个问题,但我很困惑,可能是因为我经常使用正则表达式 我希望在MicrosoftSQL2008的VARCHAR或TEXT-type列中匹配整个单词 我有一个CLR程序集 我需要它来匹配这些示例案例中的枪: 枪已装弹 上膛枪炮 我的枪已装弹 而不是在这些情况下: 枪很棒 我有枪 我的枪很棒 我宁愿不走全文搜索路线 以下是我尝试过但失败的一些事情: WHERE PATINDEX( '%[^a-zA-Z_]' + @keyword + '[^a-zA-Z_]%', name)

我花了几个小时研究这个问题,但我很困惑,可能是因为我经常使用正则表达式

我希望在MicrosoftSQL2008的VARCHAR或TEXT-type列中匹配整个单词

我有一个CLR程序集

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

  • 枪已装弹
  • 上膛枪炮
  • 我的枪已装弹
而不是在这些情况下:

  • 枪很棒
  • 我有枪
  • 我的枪很棒
我宁愿不走全文搜索路线

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

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]%'
。。。不考虑字符串开头的单词

WHERE name LIKE '%\b' + @keyword + '\b%'
。。。还有一些我没有救的人


我似乎不能依靠正则表达式测试人员来完成这一任务。感谢您的帮助。

关键是修改
名称以进行比较。只要在开头和结尾加一个空格,就可以得到所有的单词。例如:

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

应该做得很好。

你真的在使用CLR正则表达式函数吗?你所举的例子看起来不像。我正在拿这个二手货。我认为现有的代码看起来与文档不匹配。我看看我是否能看懂那些文件。谢谢。你没有使用任何CLR函数。。。只有本机的
功能,如
PatIndex
功能。这将导致最大长度或最大长度减1的字符串出现问题。如果name为VARCHAR(8000),LEN(name)为7999,则
''+name+''
将没有终止空格;如果LEN(name)为8000,则
''+name+''
将截断最后一个字符,同时不带终止空格。@TT。如果这确实是一个问题,则将
名称
强制转换为
varchar(max)