猿问

T-SQL中的SQL Server正则表达式

是否有用于SQL Server的正则表达式库T-SQL(无CLR,无扩展SP,纯净T-SQL)编写?

(应与共享主机一起使用)

编辑:

  • 谢谢,我知道PATINDEXLIKE,xp_ SPS andCLR`解决方案

  • 我也知道这不是最好的地方regex,这个问题是理论上的:)

  • 减少的功能也被接受


哔哔one
浏览 1525回答 3
3回答

qq_笑_17

如何在PATINDEX函数?TSQL中的模式匹配不是完整的正则表达式库,但它为您提供了基础知识。(摘自在线图书)Wildcard  Meaning  % Any string of zero or more characters._ Any single character.[ ] Any single character within the specified range     (for example, [a-f]) or set (for example, [abcdef]).[^] Any single character not within the specified range     (for example, [^a - f]) or set (for example, [^abcdef]).

潇湘沐

如果您使用的是SQL Server 2016或更高版本,则可以sp_execute_external_script与R一起使用。它具有用于正则表达式搜索的功能,例如grep和grepl。这是电子邮件地址的示例。我将通过SQL Server数据库引擎查询一些“人员”,将这些人员的数据传递给R,让R决定哪些人员的电子邮件地址无效,然后让R将这些人员的子集传递回SQL Server。“人员”来自示例数据库中的[Application].[People]表[WideWorldImporters]。它们作为名为的数据帧传递到R引擎InputDataSet。R使用grepl函数和“ not”运算符(感叹号!)来查找哪些人的电子邮件地址与RegEx字符串搜索模式不匹配。EXEC sp_execute_external_script&nbsp;&nbsp;@language = N'R',&nbsp;@script = N' RegexWithR <- InputDataSet;OutputDataSet <- RegexWithR[!grepl("([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4}))", RegexWithR$EmailAddress), ];',&nbsp;@input_data_1 = N'SELECT PersonID, FullName, EmailAddress FROM Application.People'&nbsp;WITH RESULT SETS (([PersonID] INT, [FullName] NVARCHAR(50), [EmailAddress] NVARCHAR(256)))请注意,必须在SQL Server主机上安装适当的功能。对于SQL Server 2016,它称为“ SQL Server R服务”。对于SQL Server 2017,它已重命名为“ SQL Server机器学习服务”。结束语 微软的SQL(T-SQL)实现没有对RegEx的本机支持。与使用CLR存储过程相比,此提议的解决方案对于OP可能并没有任何希望。但这确实提供了解决该问题的其他方法。
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答