sql server使用正则表达式
发布时间
阅读量:
阅读量
目标
为数据库开发一个正则表达式函数作为查询辅助工具
不推荐使用函数类解决方案,因为对于内存中的问题可以直接通过代码解决的情况来说,采用代码直接处理更为高效
此方法仅供参考性质
操作
- 创建一个sql server项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmEHyF1U-1607503197771)(https://user-images.githubusercontent.com/19277908/44075424-55e5e8be-9fcf-11e8-8f77-f48b7686499e.png)] - 制定规则模式识别方法
public class 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);
else
match = 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;
}
}
- 配置相关数据库信息
通过右键属性设置连接字符串,并支持添加多个连接
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
指定数据库版本
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 - 通过右键选择发布选项
完成相关操作后即可完成部署流程。

使用
--注意N不能遗漏
--注意sql里面的"true","false"对应1,0
where dbo.RegexMatch(table.property,N'"title":"[^"]*搜索内容[^"]*"',1)=1
注意事项
发布报错信息显示:在尝试执行 CREATE ASSEMBLY 运行时出现错误,请检查相关设置以确保项目兼容性。
由于该程序集被创建为公共语言环境下的不可用版本,在SQL SERVER 2008R2环境下无法直接使用.net4.0框架。建议将项目转换至.net3.5框架重新部署即可解决问题。
在运行时环境配置中设置完成后未成功生成可执行文件,请检查配置参数是否正确。
当尝试运行SQL时会遇到错误:在.NET Framework中不被允许运行用户代码的SQL语句。要启用‘clr enabled’配置设置以解决此问题。通过启用‘clr enabled’配置设置来解决此问题。
exec sp_configure 'show advanced options', '1';
go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go
参考文献:不建议在 .NET Framework 中直接执行用户代码;可以通过启用 clr enabled 设置项来模拟类似的行为
参考资料
如何实现SQL Server 对组件 ‘Ole Automation Procedures’ 的 过程’sys.sp_OACreate’ 访问的禁止措施?
SQL Server环境下如何应用正则表达式进行数据处理?
请指导如何在VS2013环境中配置并运行SQLServer项目的相关步骤?
其他——PATINDEX
where PATINDEX(N'%搜索内容%', table.property)>=1
这里采用了通配符来进行字符串的比较操作。PATINDEX (Transact-SQL)该函数用于获取字符串中特定子串的位置信息。它会返回匹配的位置序号值;若未找到对应字符,则返回值为零。当位置序号大于等于一时,则表示该子串确实存在于原始字符串中
全部评论 (0)
还没有任何评论哟~
