为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2019-10-09 15:13:12
是否有用于SQL Server的正则表达式库T-SQL(无CLR,无扩展SP,纯净T-SQL)编写?(应与共享主机一起使用)编辑:谢谢,我知道PATINDEX,LIKE,xp_ SPS andCLR`解决方案我也知道这不是最好的地方regex,这个问题是理论上的:)减少的功能也被接受
查看完整描述

3 回答

?
qq_笑_17

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]).


查看完整回答
反对 回复 2019-10-09
?
潇湘沐

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可能并没有任何希望。但这确实提供了解决该问题的其他方法。


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 1524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信