问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sqlserver中正则表达式和分组查询

发布网友 发布时间:2022-04-29 01:23

我来回答

4个回答

热心网友 时间:2022-04-08 07:00

使用vbscript 或者是frameword程序集向SqlServer数据库中添加一个正则表达式函数,就可以满足你的需求了嘛。
vbscript 函数(需要SqlServer运行环境中vbscript 库)

CREATE function [dbo].[RegexMatchFirst]
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@global bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @objMatch INT
declare @matchcount INT
declare @command varchar(50)
declare @result varchar(5000)
exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'Global', @global
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OAMethod @objRegExp, 'execute', @objmatch OUTPUT, @source
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

EXEC @hr= sp_OAGetProperty @objmatch, 'count', @matchcount OUT
IF @hr <> 0 or @objmatch = 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
set @command = 'item(0).Value'
EXEC @hr= sp_OAGetProperty @objmatch, @command, @result OUT

exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end

framework运行时程序集:
打开 Microsoft Visual Studio,创建一个sqlserver 数据库数据库项目,在项目中按照SqlServer方式创建一个正则表达式匹配函数,然后编译部署到你的SqlServer数据库中。
这个时候刷新数据库的可编程性-->函数 --> 标量值函数就会看到你在Microsoft Visual Studio中创建的自定义函数了。

热心网友 时间:2022-04-08 08:18

是否匹配:
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,非常方便的提取。

热心网友 时间:2022-04-08 09:53

sqlserver2000 不支持正则表达式的。

只能自己编写函数,来进行数字的分析判断,比如:

f_has4digit('aaa4587fd')
返回0和1

然后放到查询中,并进行group by即可。

热心网友 时间:2022-04-08 11:44

这么老的数据库,干嘛不用代码来处理这个逻辑。追问如果直接从数据库取出数据,然后用服务器端的语言,比如php进行循环正则

然后用循环进行分类汇总,经过2次全范围循环,这个过程会不会效率太低了

追答那你就用临时表在数据库端处理,但是数据库段压力会很大,如果用代码在内存处理的话才4W条数据应该不会很慢的。你试试。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? java中正则表达式 分组 Java正则表达式匹配分组 a:b c:d b:c d:e python 正则 分组为什么无法匹配 java正则表达式如何获取分组匹配内容 怎么用正则表达式匹配下面语句并将汉字部分分组? java正则表达式关于分组的问题,我能理解group(0)是匹配的全组 华为p9通知栏时间和系统时间不一致 正则表达式的分组引用 华为网络ec2106v2出现时间同步失败 正则表达式 怎么替换匹配到的每个分组的值 华为e1308 时间同步失败 华为g610一c00桌面时间显示和实际时间不一样求解 perl 正则表达式中模式分组/y((.)(.)\3 \2) d\1/ 是怎么匹配的? 正则表达式 分组匹配数组json问题: 常青藤剪下来以后怎么栽n 正则表达式如何只匹配某分组名下的文本 华为P9为什么老是提示系统时间错误设备时间和电脑上 羽绒服线缝的扣子怎样挪? 求一正则表达式写法,多个分组+匹配 黑色羽绒服上面有一条橙色拼接 jquery 正则匹配 有没类似C# Match.Groups 取分组匹配的值的方法? 正则表达式(a(b(c))) 能匹配哪些文本,为什么可以匹配这些文本那?就这种分组嵌套搞不懂? C#正则表达式分组实现方法 正则小括号的作用分组是什么意思呢(\\.[\\w-]+),加与不加有什么区别呢... 微信彩虹马是什么意思? 学生用微信怎样赚钱? 儿童动画片彩虹马的片名,哪里可以下载到 彩虹马为什么放屁是彩色的 lol人马 彩虹马皮肤还会出吗? 泰拉瑞亚彩虹马有什么用 元气骑士激光鱼和彩虹马哪个好? QQ彩虹马签到版还能领取吗? 你看看这个马叫什么名字。 LOL 彩虹马皮肤还会在出售吗 彩虹马是什么成语 无主之地2DLC4全通了,彩虹马也回村子了,怎么才能喂马?怎么弄都没反应啊 英雄联盟的彩虹马皮肤往年大概什么价格,买过CDK 的在回答! 情侣卡需要认证几次才能到账 lol彩虹马算珍贵皮肤吗 Python如何统计一行数据同时满足A和B的次数?