Microsoft SQL Server相当于MySQL REGEXP的功能

6

我正在尝试在Microsoft SQL Server中重构我为MySQL创建的数据库查询。我正在寻找一个在SQL Server中类似于REGEXP的操作符或函数。

这里是我如何使用该操作符的示例:

select *
from   musicdetails
WHERE  artistname REGEXP '^".mysql_escape_string($_GET['search'])."$'
3个回答

6

以下是(编译为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;
  }
}

2

0

虽然leppie的答案中的代码可以编译和执行,但我不建议在生产环境中使用。如果您想要使用以下功能的正则表达式函数:

  • 使用最佳实践编写(用于性能和安全)
  • 适当地处理NULL
  • 执行更好/更有效
  • 具有更多选项(例如@StartAt@RegExOptions用于IgnoreCaseMultiLine等)
  • 提供更多功能(例如CaptureGroupCaptureGroupCaptureEscapeUnescape等)
  • 无需额外的部署工作(即单个、自包含的T-SQL脚本,可移植且可版本化,并且安装时不需要手动启用“CLR启用”或者干扰SQL Server 2017中引入的"CLR strict security"设置

如果你需要免费的SQLCLR库,那么可以看看我写的SQL# SQLCLR库。在免费版本中有13个正则表达式函数(完整/付费版本中还有2个,以及增加表达式缓存大小的功能,这对于经常使用各种表达式的人很有帮助)。

我相信函数RegEx_IsMatch(或RegEx_IsMatch4k)是你要找的(是的,在免费版本中有这个函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接