繁体   English   中英

相当于MySQL REGEXP的Microsoft SQL Server

[英]Microsoft SQL Server equivalent of MySQL REGEXP

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

这是我如何使用运算符的示例:

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;
  }
}

在SQL Server(仅限2005年及更高版本)中执行此操作的唯一方法是使用CLR函数。 作为本机SQL查询一部分的正则表达式不是标准的。

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

虽然leppie答案中的代码可以编译和执行,但我不建议将其用于生产。 如果要使用RegEx函数,请执行以下操作:

  • 使用最佳做法进行编码(出于性能和安全性考虑)
  • 适当地处理NULL
  • 表现更好/更高效
  • 有更多选项(例如, IgnoreCase的 @StartAt@RegExOptionsMultiLine等)
  • 提供更多的功能(例如CaptureGroup,CaptureGroupCapture, 逃生 ,UNESCAPE等)
  • 不需要额外的精力来部署(即,一个可移植且可版本控制的独立的T-SQL脚本,并且可以干净地安装,而无需手动启用“启用了CLR”或使用引入“ CLR严格安全性”设置在SQL Server 2017中

并且也是免费的,然后签出SQL# SQLCLR库(我写的)。 免费版中有13个RegEx函数(完全版/付费版中还有2个RegEx函数,以及增加表达式缓存大小的功能,如果您经常使用各种表达式,则可以提供帮助)。

我相信您正在寻找功能RegEx_IsMatch (或RegEx_IsMatch4k )(是的,它在免费版本中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM