【问题标题】:Microsoft SQL Server equivalent of MySQL REGEXP相当于 MySQL REGEXP 的 Microsoft SQL Server
【发布时间】:2011-01-31 16:43:49
【问题描述】:
我正在尝试重建我在 Microsoft SQL Server 中为 MySQL 创建的数据库查询。我正在寻找类似于REGEXP 的运算符或函数 SQL Server。
这是我如何使用运算符的示例:
select *
from musicdetails
WHERE artistname REGEXP '^".mysql_escape_string($_GET['search'])."$'
【问题讨论】:
标签:
mysql
sql-server
regex
tsql
【解决方案1】:
给你(编译为 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;
}
}
【解决方案3】:
虽然 leppie 的答案中的代码可以编译和执行,但我不建议将其用于生产用途。如果你想要 RegEx 函数:
而且也是免费的,然后查看SQL# SQLCLR 库(我编写的)。免费版有 13 个正则表达式函数(完整版/付费版还有 2 个,加上增加表达式缓存大小的能力,如果您经常使用各种表达式,这会有所帮助)。
我相信函数 RegEx_IsMatch(或 RegEx_IsMatch4k)是您正在寻找的(是的,它在免费版本中)。