Sql server SQL Server-使用like和某种正则表达式进行选择

Sql server SQL Server-使用like和某种正则表达式进行选择,sql-server,regex,Sql Server,Regex,我想执行一个select,查找每个具有$ValueSomeNumber$之类内容的行。零件值和零件编号是动态的 如何生成与此条件匹配的select 我试着这样做: DECLARE @VALUE VARCHAR(255) SET @VALUE = 'Badass(5)' -- it could Badass, Badass(XXX) or Badass(XX) SELECT Txt FROM Employers where Txt LIKE '%$' + @VALUE + '$%' OR

我想执行一个select,查找每个具有$ValueSomeNumber$之类内容的行。零件值和零件编号是动态的

如何生成与此条件匹配的select

我试着这样做:

DECLARE @VALUE VARCHAR(255)
SET @VALUE = 'Badass(5)' -- it could Badass, Badass(XXX) or Badass(XX)
SELECT Txt FROM Employers where Txt LIKE '%$' + @VALUE + '$%' OR 
    TxT LIKE '%$' + @VALUE + '\(\d{2}\)$%'

MSSQL对正则表达式的内置支持很差,有两个选项

创建CLR存储例程,请参阅

b在TSQL中使用VBScript.RegExp,请参见

两者都至少需要MSSQL 2005

包含正则表达式CLR函数的CLR包

如果你想要正则表达式并且可以使用CLR,我会使用

不太确定基于问题中可用内容的搜索规则,但这可能导致:

声明@value varchar255='Badass5'-可以是Badass、BadassXXX或BadassXX/ 声明@括号int=isnullnullifcharindex,@value,0256 声明@search_str varchar255='%$'+left@value,@括号-1 在256时声明@somenumber varchar255=case@括号,然后“%$%”else“[0-9]]$%”结束 声明@search varchar255=@search\u str+@somenumber -选择value=@value,search\u str=@search\u str,somenumber=@somenumber,search=@search 选择StringMatch=case,当rowtxt与@search相似时,选择1,否则选择0结束 ,value=@value ,rowtxt 从select rowtxt='This is SamSaffron$Badass$' 联合所有选择“这是BrentO$Badass12$” 联合所有选择“这是AaronBertrand$Badass20141222$” union all选择“这是SqlZim$而不是BADASN$” union all select“这是SqlZim$BADASSBUTNONNUMBER$” union all select“这是SqlZim$Badass1Number$” 我 @值='BadAss5'返回值


我不知道你的搜索条件是什么。搜索是否会改变,所以有时你会搜索Badass5,有时搜索Badass10,有时搜索42?或者您正在尝试查找与[[:alpha:]+[[:digit:]+]匹配的所有内容?或者不同的东西。@Boom和Fernando:我强烈建议避免OLE自动化过程,即sp_OA*,这是使用VBScript.RegExp的选项2的基础。自SQL Server 2005起,OLE自动化过程以及扩展存储过程都已弃用。 IsMatch value rowtxt ----------- ---------------- ----------------------------------------- 0 Badass(5) This is SamSaffron $Badass$ 1 Badass(5) This is BrentO $Badass(12)$ 1 Badass(5) This is AaronBertrand $Badass(20141222)$ 0 Badass(5) This is SqlZim $Not As Badass(N)$ 0 Badass(5) This is SqlZim $Badass(ButNoNumber)$ 1 Badass(5) This is SqlZim $Badass(1Number)$ IsMatch value rowtxt ----------- ---------------- ----------------------------------------- 1 Badass This is SamSaffron $Badass$ 1 Badass This is BrentO $Badass(12)$ 1 Badass This is AaronBertrand $Badass(20141222)$ 0 Badass This is SqlZim $Not As Badass(N)$ 1 Badass This is SqlZim $Badass(ButNoNumber)$ 1 Badass This is SqlZim $Badass(1Number)$