3 回答
TA贡献1818条经验 获得超7个赞
如何在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]).
TA贡献1816条经验 获得超6个赞
如果您使用的是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可能并没有任何希望。但这确实提供了解决该问题的其他方法。
- 3 回答
- 0 关注
- 1524 浏览
添加回答
举报