我正在尝试重建我在Microsoft SQL Server中为MySQL创建的数据库查询。我正在寻找一个运算符或函数SQL Server,其作用类似于REGEXP
。
以下是我如何使用运算符的示例:
select *
from musicdetails
WHERE artistname REGEXP '^".mysql_escape_string($_GET['search'])."$'
答案 0 :(得分:5)
在这里(编译为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;
}
}
答案 1 :(得分:1)
在SQL Server(仅限2005及以上版本)中执行此操作的唯一方法是使用CLR函数;作为本机SQL查询的一部分的正则表达式不是标准的。
答案 2 :(得分:0)
虽然leppie的答案中的代码将编译并执行,但我不建议将其用于生产用途。如果您希望RegEx功能:
NULL
@StartAt
,@RegExOptions
IgnoreCase , MultiLine 等)并且也是免费的,然后查看SQL# SQLCLR库(我写的)。 Free版本中有13个RegEx函数(还有2个Full / paid版本,还有增加表达式缓存大小的功能,如果您经常使用各种表达式,这可能会有所帮助。)
我相信函数 RegEx_IsMatch (或 RegEx_IsMatch4k )正是您所寻找的(是的,它是免费版本)。