SQL Server中使用正则表达式
2014-06-19 16:06 by 假面Wilson, 2144 阅读, 0 评论, 收藏, 编辑
SQL Server 2005及以上版本支持用CLR语言(C# .NET、VB.NET)编写过程、触发器和函数,因此使得正则匹配,数据提取能够在SQL中灵活运用,大大提高了SQL处理字符串,文本等内容的灵活性及高效性。
操作步骤:
1.新建一个SQL Server项目(输入用户名,密码,选择DB),新建好后,可以在属性中更改的
2.新建一个类“RegexMatch.cs”,选择用户定义的函数
可以看到,该类为一个部分类:public partial class UserDefinedFunctions
现在可以在该类中写方法了,注意方法的属性为:[Microsoft.SqlServer.Server.SqlFunction]
现在类中增加以下两个方法:
/// 是否匹配正则表达式 /// </summary>/// <param name="input">输入的字符串</param>/// <param name="pattern">正则表达式</param>/// <param name="ignoreCase">是否忽略大小写</param>/// <returns></returns> [Microsoft.SqlServer.Server.SqlFunction] public static bool RegexMatch(string input, string pattern, bool ignoreCase){ bool isMatch = false; if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(pattern)){ try{Match match = null; if (ignoreCase)match = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled); elsematch = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.Compiled); if (match.Success)isMatch = true;} catch { }} return isMatch;} /// 获取正则表达式分组中的字符 /// </summary>/// <param name="input">输入的字符串</param>/// <param name="pattern">正则表达式</param>/// <param name="groupId">分组的位置</param>/// <param name="maxReturnLength">返回字符的最大长度</param>/// <returns></returns> [Microsoft.SqlServer.Server.SqlFunction] public static string GetRegexMatchGroups(string input, string pattern, int groupId, int maxReturnLength){ string strReturn = string.Empty; if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(pattern)){ try{Match match = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled); if (match.Success && (groupId < match.Groups.Count)){strReturn = match.Groups[groupId].Value;strReturn = (strReturn.Length <= maxReturnLength) ? strReturn : strReturn.Substring(0, maxReturnLength);}} catch{ return string.Empty;}} return strReturn;}
3.下一步就是部署的问题了,点击项目右键--》部署即可
提示部署成功了,可以在数据库的标量值函数中多了这两个方法了。
使用方法和正常的SQL函数一样:
dbo.RegexMatch('/Book/103.aspx','/book/(\d+).aspx','true') 消息 6263,级别 16,状态 1,第 1 行 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。
——出现此错误,配置下:
exec sp_configure 'clr enabled',1;reconfigure with override;
是否匹配:
select dbo.RegexMatch('/Book/103.aspx','/book/(\d+).aspx',1)
返回1,表示匹配成功
select dbo.RegexMatch('/Book/103.aspx','/book/(\d+).aspx',0)
表示0,匹配失败(不忽略大小写)。
数据提取:
select dbo.GetRegexMatchGroups('/Book/103.aspx','/book/(\d+).aspx',1,50)
返回103,非常方便的提取。
注意:SQL中使用CLR时,尽量使用try catch…以免出现异常。
转载于:https://blog.51cto.com/wwdyl/1733903
SQL Server中使用正则表达式相关推荐
- SQL Server中执行正则表达式
总体方案:写function,再执行update语句. 一.查询函数 -- ============================================= -- Author: <l ...
- 在sql server中用正则表达式替换html标签,SQL Server中利用正则表达式替换字符串
建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...
- SQL server 中SQL语句实战操作
学习网址链接: https://www.w3school.com.cn/sql/sql_top.asp 学习案例链接: https://wenku.baidu.com/view/720053b459f ...
- SQL Server中的T-SQL RegEx命令
This article explores T-SQL RegEx commands in SQL Server for performing data search using various co ...
- php删除sql server 2008,MSSQL_SQL Server2008 数据库误删除数据的恢复方法分享,SQL Server中误删除数据的恢复本 - phpStudy...
SQL Server2008 数据库误删除数据的恢复方法分享 SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的 ...
- SQL Server中Identity标识列
SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便.但它有时还会带来一些麻烦. SQL Server中,经常会用到Identity标识列,这种自增长的字段 ...
- predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析
SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致 ...
- mysql2008 limit,在SQL Server中实现 Limit m, n 的功能
在SQL Server中实现 Limit m, n 的功能 (2012-03-14 18:17:43) 标签: 杂谈 在MySQL中,可以用 Limit 来查询第 m 列到第 n列的记录,例如: se ...
最新文章
- xp/2003开关3389指令
- Lua bind 和 conf 实现
- 刻意练习:Python基础 -- Task12. 模块
- xftp6设置默认打开文件的程序_xftp6如何使用?xftp6传输文件的使用详细方法--系统之家...
- windows系统托盘tray
- python处理excel表格-Python读写Excel表格(简单实用)
- WP布局难题,由三个升级为四个
- arcmap中有火星坐标码_GIS转换之火星坐标系转换
- winSCP start
- 移动端web及app设计尺寸
- 微信朋友圈python广告评论_利用Python让你的微信朋友圈与众不同,更加高大上
- vue-pdf vue中导入文件 并预览
- 产品经理入门:二、一个需求的奋斗史
- HC-SR501 人体红外感应模块 单片机
- 任务二:移动通信发展史
- 2022-2028年中国智慧社区建设行业市场专项调研及投资前景研究报告
- 企业微信机器人发送消息
- axis=0 与 axis=1 的区分
- 最新!2023年工程测量乙级测绘资质申请标准
- 【李叫兽】如何识别故作高深的空话