我正在尝试在Microsoft SQL Server中重构我为MySQL创建的数据库查询。我正在寻找一个在SQL Server中类似于REGEXP
的操作符或函数。
这里是我如何使用该操作符的示例:
select *
from musicdetails
WHERE artistname REGEXP '^".mysql_escape_string($_GET['search'])."$'
我正在尝试在Microsoft SQL Server中重构我为MySQL创建的数据库查询。我正在寻找一个在SQL Server中类似于REGEXP
的操作符或函数。
这里是我如何使用该操作符的示例:
select *
from musicdetails
WHERE artistname REGEXP '^".mysql_escape_string($_GET['search'])."$'
以下是(编译为SQL CLR程序集)的方法:
using System.Collections;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction]
public static bool RegexMatch(string expr, string regex)
{
return Regex.IsMatch(expr, regex);
}
[SqlFunction]
public static string RegexReplace(string expr, string regex, string replace)
{
return Regex.Replace(expr, regex, replace);
}
[SqlFunction(FillRowMethodName="GetToken",
TableDefinition="Value nvarchar(max)")]
public static IEnumerable RegexSplit(string expr, string regex)
{
return Regex.Split(expr, regex);
}
public static void GetToken(object row, out string str)
{
str = (string) row;
}
}
虽然leppie的答案中的代码可以编译和执行,但我不建议在生产环境中使用。如果您想要使用以下功能的正则表达式函数:
NULL
@StartAt
,@RegExOptions
用于IgnoreCase,MultiLine等)如果你需要免费的SQLCLR库,那么可以看看我写的SQL# SQLCLR库。在免费版本中有13个正则表达式函数(完整/付费版本中还有2个,以及增加表达式缓存大小的功能,这对于经常使用各种表达式的人很有帮助)。
我相信函数RegEx_IsMatch(或RegEx_IsMatch4k)是你要找的(是的,在免费版本中有这个函数)。