CLR实用函数:正则、字符串聚合

guguda2008 2013-04-07 04:01:42
加精
写了四个CLR函数,我们比较常用的功能

自定义函数

REGULARMATCH() 对应C#中MATCH

IS_REGULARMATCH() 对应C#中IS_MATCH

自定义聚合

STR_SUM 字符串聚合,中间半角逗号分隔

STR_UNION_SUM 字符串去重聚合,也是半角逗号分隔


使用示例:
USE MASTER  
GO


--判断手机号是否合法
SELECT dbo.IS_REGULARMATCH('13888888888','^(1[3,5,8,4][0-9])\d{8}$'),dbo.IS_REGULARMATCH('123456789','^(1[3,5,8,4][0-9])\d{8}$')
--1 0

--聚合函数使用示例
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
ID INT
,VAL VARCHAR(MAX)
)
GO
INSERT INTO TB
SELECT 1,'AA' UNION ALL
SELECT 2,'B' UNION ALL
SELECT 3,'CD'
GO
INSERT INTO TB
SELECT 1,'AA' UNION ALL
SELECT 2,'BB' UNION ALL
SELECT 3,'CD'
GO
SELECT ID,DBO.STR_SUM(VAL),DBO.STR_UNION_SUM(VAL)
FROM TB
GROUP BY ID
/*
1 AA,AA AA
2 BB,B BB,B
3 CD,CD CD
*/


代码太长,帖子里放不下,到下面博客里复制代码到数据库里运行后就可以用了
博客地址
...全文
4121 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
越过越咸 2013-04-15
  • 打赏
  • 举报
回复
clr mark!
u010297809 2013-04-14
  • 打赏
  • 举报
回复
很好的文章,值得观赏。
u010294895 2013-04-14
  • 打赏
  • 举报
回复
有劳有劳,学习了
u010291561 2013-04-14
  • 打赏
  • 举报
回复
很好,详细 谢谢。
看破世界 2013-04-11
  • 打赏
  • 举报
回复
王小潇 2013-04-10
  • 打赏
  • 举报
回复
学习了,非常感谢
---涛声依旧--- 2013-04-09
  • 打赏
  • 举报
回复
u010229958 2013-04-09
  • 打赏
  • 举报
回复
学习了,非常感谢
huotongyin419 2013-04-09
  • 打赏
  • 举报
回复
实话说,我是来学习的
中国风 2013-04-08
  • 打赏
  • 举报
回复
CLR要特定环境下用 曾用CLR写过按位计算分拆字符,比直接用SQL自定义函数还慢
lb253555561 2013-04-08
  • 打赏
  • 举报
回复
很好很强大很实用
tbsweiwei2010 2013-04-08
  • 打赏
  • 举报
回复
顶啊。。。。
黄_瓜 2013-04-08
  • 打赏
  • 举报
回复
无可奈何花落去; 似曾相识燕归来。
  • 打赏
  • 举报
回复
先MARK一下,改天如果有人想在SQLCLR 玩 .NET performance tuning的,我到满有兴趣。
蜕变若蛹化蝶 2013-04-08
  • 打赏
  • 举报
回复
我看着头晕啊!虽然能理解代码但是看着还是头晕啊!还是收藏下把!也许下次能用到 看来T-SQL我注定只能学皮毛啊!
冬末春晓 2013-04-08
  • 打赏
  • 举报
回复
感谢大大分享
hyde100 2013-04-08
  • 打赏
  • 举报
回复
看一下。。。。。
qldsrx 2013-04-08
  • 打赏
  • 举报
回复
引用 29 楼 roy_88 的回复:
CLR要特定环境下用 曾用CLR写过按位计算分拆字符,比直接用SQL自定义函数还慢
那是因为你不会优化.NET代码,CLR函数的效率完全取决于.NET的执行效率,其中指针是最高效率的。
qldsrx 2013-04-08
  • 打赏
  • 举报
回复
这个我早就写过,也放过下载,只不过懒得写详细介绍,下载地址在这里,免积分,想看的自己去下载吧: http://download.csdn.net/detail/qldsrx/4393361 看来下楼主的博客,其实常用的不止那些,回头看下我给的CLR函数,还有: MaxOther是某列最大时获取另外一列值的聚合函数,MinOther则反之,GetCodeTable是拆分字符串到编码,GetIdTable是拆分字符串到数字的表值函数。
u010209061 2013-04-08
  • 打赏
  • 举报
回复
曾用CLR写过按位计算分拆字符,比直接用SQL自定义函数
加载更多回复(21)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧