潇湘沐
如果您使用的是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 @language = N'R', @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), ];', @input_data_1 = N'SELECT PersonID, FullName, EmailAddress FROM Application.People' 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可能并没有任何希望。但这确实提供了解决该问题的其他方法。