sqlserver使⽤正则表达式⽬标
为数据库创建⼀个正则表达式函数,供查询使⽤
不建议使⽤函数,能查询到内存⾥⾯⽤代码解决的就⽤代码解决
这⾥的⽅法仅供参考
操作
1.新建sql server项⽬
2.定义正则表达式的⽅法
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;
}regex匹配
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.配置数据库相关信息
右键-属性,设置连接字符串,可以设置多个连接
设置数据库版本
4.右键,发布
选择⽬标数据库即可
使⽤
--注意N不能遗漏
--注意sql⾥⾯的"true","false"对应1,0
where dbo.RegexMatch(table.property,N'"title":"[^"]*搜索内容[^"]*"',1)=1
注意事项
1.发布报错:执⾏ CREATE ASSEMBLY 时失败,因为该程序集是为公共语⾔⽤户时的不受⽀持的版本⽣成的SQL SERVER 2008R2 不⽀持4.0, 需要把项⽬改成3.5 部署成功了
2.执⾏sql报错:禁⽌在 .NET Framework 中执⾏⽤户代码。启⽤ "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
参考资料
其他——PATINDEX
where PATINDEX(N'%搜索内容%', table.property)>=1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。