导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

怎样用Patindex定位一字符串中两相邻通配符的位置

水如烟 2008-01-10 05:47:54
DECLARE 
@Input nvarchar(400)
,@Pattern nvarchar(20)

SET @Input = N'这是%无___法判断的问题吗这%_%_%%是无法判断的问题吗%__%这是无%法判断的问题吗'

SET @Pattern = N'%%_%' --这里如何填才能定位到'%_'呢?

SELECT PATINDEX(@Pattern, @Input)
...全文
257 点赞 收藏 43
写回复
43 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hawk_js 2008-09-12
patindex()没看懂怎么用,郁闷!!!
回复
水如烟 2008-01-14
简单地说,实现我这个贴子的功能

http://blog.csdn.net/lzmtw/archive/2008/01/11/2038135.aspx
回复
yjlhch 2008-01-14
学习一下,要知道的还真多呀
回复
fcuandy 2008-01-14
query里没有.
query里应用的是xquery,即xslt查询表达式.
回复
水如烟 2008-01-14
我想知道的是,xml的query里有正则查询么?
回复
水如烟 2008-01-14
哈,我现在有点兴趣把sqlserver的平台当编程用,所以做些吃力不讨益的事
回复
fcuandy 2008-01-14
正则是处理字串的, 那么对于xml来说,它也可以转化为字串, 那就当然是可以的了.

无论哪种语法使用正则都是实例化正则对象,然后进行操作,这点并无不同.

你那个贴子里的内容我看了,正如你所说"我现在想实现一个简单的利用通配符搜索、置换的函数"

待处理的字串也不一定是个规范的xml文档,虽然一个字串可以转换为xml格式,直接cast as, 会使一个不符规范的字串转化失败, 或转化后的结果根本不是你想要的.
因为你在这个贴子里示例的内容就是一个符合xml规范的字串,所以我就直接用xml来操作了.
像你blog里的某几个例子,用xml来处理就不适用.
看了你的贴子,我也是受益非浅.

字串处理,对于sql来说,的确不是强项,如果是我,我可能会直接把工作交给前台程序来完成(条件允许的话).
回复
水如烟 2008-01-13
我只知道数据库中可以通过系统函数来引用外部的正则服务(名词我是不记的)
但出于安全考虑,是不大想这么做的

应用程序可以用正则,xml可以用正则吗?
回复
fcuandy 2008-01-13
其实sql2005我也刚学没几天, 只是接触xml的时间比较早,所以上手快一点而已. 提供思路或方法就谈不上了.
依具楼主你的水平,虽然说可能以前没接触过,但这些对你来说都不是难事.

也可以直接调用正则的, 跟在开发语言或脚本语言中一样. 用正则的话, 代码会简洁很多.

看过楼主你的一些贴子, 从中学到不少.
回复
水如烟 2008-01-13
楼上的,真是非常感谢.

我现在想实现一个简单的利用通配符搜索、置换的函数,也想用xml来操作,但对这些接触不多,可否提供一些思路或方法呢?
函数功能相当于Regex.Match,Regex.Replace,Regex.Split,说它简单,我只能实现不多的转义操作,对Group的个数也限制较死。

今天才开始补xml的课。可怜。
回复
fcuandy 2008-01-13
实现相同的目的,除了用charindex,patindex,写函数,利用xml数据类型外,还有很多方法.
比如正则, 或是临时表与</a> 及</td>这样的特征字串连表.略去,不写了.
回复
fcuandy 2008-01-13
DECLARE @Info nvarchar(max)

SET @Info = N'
<td><a rel="mz" href=''http://www.csdn.net/''>首页</a></td>
<td><a rel="mz" href=''http://news.csdn.net/''>新闻</a></td>
<td><a rel="mz" href=''http://bbs.csdn.net/''>论坛</a></td>
<td><a rel="mz" href=''http://groups.csdn.net/''>群组</a></td>
<td><a rel="mz" href=''http://blog.csdn.net/''>Blog</a></td>
<td><a rel="mz" href=''http://dev.csdn.net/''>文档</a></td>
<td><a rel="mz" href=''http://download.csdn.net/''>下载</a></td>
<td><a rel="mz" href=''http://book.csdn.net/''>读书</a></td>
<td><a rel="mz" href=''http://tag.csdn.net/''>Tag</a></td>
<td><a rel="mz" href=''http://wz.csdn.net/''>网摘</a></td>
<td><a rel="mz" href=''http://search.csdn.net/''>搜索</a></td>
<td><a rel="mz" href=''http://gforge.osdn.net.cn/''>开源</a></td>
<td><a rel="mz" href=''http://faq.csdn.net/''>FAQ</a></td>
<td><a rel="mz" href=''http://www.dearbook.com.cn/''>第二书店</a></td>
<td><a rel="mz" href=''http://www.broadview.com.cn/''>博文视点</a></td>
<td><a rel="mz" href=''http://www.programmer.com.cn/''>程序员</a></td>
'
DECLARE @x XML
SET @x=@info
SELECT x.query('text()') Title,x.value('./@href','varchar(100)') Url FROM @x.nodes('//td/a') AS t(x)
/*
首页 http://www.csdn.net/
新闻 http://news.csdn.net/
论坛 http://bbs.csdn.net/
群组 http://groups.csdn.net/
Blog http://blog.csdn.net/
文档 http://dev.csdn.net/
下载 http://download.csdn.net/
读书 http://book.csdn.net/
Tag http://tag.csdn.net/
网摘 http://wz.csdn.net/
搜索 http://search.csdn.net/
开源 http://gforge.osdn.net.cn/
FAQ http://faq.csdn.net/
第二书店 http://www.dearbook.com.cn/
博文视点 http://www.broadview.com.cn/
程序员 http://www.programmer.com.cn/
*/
回复
水如烟 2008-01-11
那你的意思是每个版都要升星了
回复
wzy_love_sly 2008-01-11
再一个月俺sql升了星,就去net版,你老大多关照哦
回复
-狙击手- 2008-01-11
学习
回复
水如烟 2008-01-11
彼此彼此,我多是看着别人的问题来学习的
回复
wzy_love_sly 2008-01-11
lz每次提问题都让我学习,牛
回复
水如烟 2008-01-11
呵,欢迎欢迎
分嘛,不多,少少的还是有些的
回复
wzy_love_sly 2008-01-11
╭╮╭╮
╭★┴┴★╮
│︵  ︵│
╰○--○╯
 ╰○○
回复
-狙击手- 2008-01-11
接分,可以不
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告