4496470 发表于 2009-7-6 15:55:27

在SQL中使用正则表达式来查找你所要的字符

从表的某个字段判断是否存在某些规则的字符串,大概如下:

有个表叫TaskDeploy(任务部署的),其中字段Participants以格式 用户名,用户名 具体如下:

admin,小明,samlin
小明,samlin,test
samlin,test,小明
samlin,admin
samlin,test
samlin,test

好了,现在我要查找有指派给 'samlin'用户的任务记录怎么办?

我首先想到的是正则表达式,但Sql提供的功能真是少啊就是一个 like 加几个通配符,显然是满足不了我的要求的。

于是从网上搜集了一些资料,整理了一下。

下面这个是一个自定义函数,用户可以调用这个函数判断指定的字符串是否符合正则表达式的规则.

CREATE FUNCTION dbo.find_regular_expression(@source varchar(5000),   --需要匹配的源字符串@regexp varchar(1000),--正则表达式@ignorecase bit = 0--是否区分大小写,默认为false)RETURNS bit--返回结果0-false,1-trueASBEGIN--0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。DECLARE @hr integer --用于保存返回的对象令牌,以便之后对该对象进行操作DECLARE @objRegExp integer   DECLARE @objMatches integer--保存结果DECLARE @results bit/*创建 OLE 对象实例,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate,并确定机器中有VBScript.RegExp类库*/EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUTIF @hr <> 0 BEGINSET @results = 0RETURN @resultsEND/*以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:Dim regEx,Match,Matches         '建立变量。Set regEx = New RegExp         '建立一般表达式。regEx.Pattern= patrn         '设置模式。regEx.IgnoreCase = True         '设置是否区分大小写。regEx.Global=True                           '设置全局可用性。set Matches=regEx.Execute(string)             '重复匹配集合RegExpTest = regEx.Execute(strng)       '执行搜索。for each match in matches                     '重复匹配集合RetStr=RetStr &"Match found at position "RetStr=RetStr&Match.FirstIndex&".Match Value is '"RetStr=RetStr&Match.Value&"'."&vbCRLF NextRegExpTest=RetStr*/EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexpIF @hr <> 0 BEGINSET @results = 0RETURN @resultsENDEXEC @hr = sp_OASetProperty @objRegExp, 'Global', falseIF @hr <> 0 BEGINSET @results = 0RETURN @resultsENDEXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecaseIF @hr <> 0 BEGINSET @results = 0RETURN @resultsEND --调用对象方法EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @sourceIF @hr <> 0 BEGINSET @results = 0RETURN @resultsEND--释放已创建的 OLE 对象EXEC @hr = sp_OADestroy @objRegExpIF @hr <> 0 BEGINSET @results = 0RETURN @resultsENDRETURN @resultsEND

丽奎军 发表于 2009-10-22 11:27:26

一、不要等到想要得到爱时才学会付出
人生就像一场戏,在等待中错过了美丽。正如歌中上海火速所唱:该出手时就出手。因为幸福就在你身边。当你付出时,爱已从你身边轻轻划过,留下的是悔恨、遗憾。

二、不要等到孤单时才想念起你的朋友
什么是朋友?真正的朋友永远不会离弃你。人生得一上海火速公司知己足矣,孤独时、彷徨时,朋友是你最忠实的听众,他们没有怨言,他们有的只是一颗包容的心。

三、不要等到有了职位时才去努力工作
有的人一生都在等待让自己满意的工作,待到白发之时方才后悔自己执著地等待。因为世界真的很精彩,只要你肯努力,处处都有你满意的工作。

四、不要等到失败时才记起他人的忠告
忠言逆耳利于行,良药苦口利于病。世人上海google代理商往往善于听信谗言,因为谗言总是美丽的,而忘了这句古话。待到自己失败时,一切如过眼云烟,烟消云散。

五、不要等到生病时才意识到生命脆弱
生命真的很脆弱,一只蚂蚁可能死在你google代理商的脚下,只不过你没有觉察。可能你在生命的边缘徘徊,为什么不珍惜自己的生命?
六、不要等到分离时后悔没有珍惜感情
为什么总是离别之后才懂得珍惜,因为人无完人,金无足赤。拥有一颗宽容的心,善待别人就等于善待自己。

七、不要等到有人赞赏你时才相信自己
每个人都有自己的优点和长处,自信有时也是成功的钥匙。要等到别人阳澄湖大闸蟹的赞赏,恐怕已经太迟了,因为生命属于你的只有一次,没有循环,没有往复。

八、不要等到别人指出才知道自己错了
其实,勇于承认错误并没有人嘲笑你,反而得到别人的尊重。因为每个人都有错误,只不过有的人善于掩饰自己的错误,有的人勇于承认罢了。

九、不要等到腰缠万贯才准备帮助穷人
助人大闸蟹为乐永远是一种美德,待到腰缠万贯之时,你不一定会快乐,因为你的施舍别人不一定接受。

十、不要等到临死时才发现要热爱生活
生活真的很精彩,为什么要游戏人生。人生就像一条长河,永远没有尽头,没有止境。并不因为你的生老病死而改变。热爱生活就等于热爱自己,不要让生命浪费在没有意义的事上,因为生命总要划上一个圆满的句号。
哎·金秋到了,想吃阳澄湖大闸蟹了!

我恨传奇 发表于 2009-10-30 14:52:13

看看有什么好东西
页: [1]
查看完整版本: 在SQL中使用正则表达式来查找你所要的字符