首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

截取字符的有关问题。

2013-01-25 
截取字符的问题。。。????如何把这些脚本中的文字提取出来。。。。。。。。。。。optgroup label安全·防护类 class

截取字符的问题。。。????
如何把这些脚本中的文字提取出来。。。。。。。。。。。
<optgroup label="安全·防护类" class="categoryParentItem">
<option value="555.14879">安全情报与分析</option>
<option value="555.11961">保安</option>
<option value="555.11769">海关与入境</option>
<option value="555.11718">机场安全检查</option>
<option value="555.11926">警察执法</option>
<option value="555.11879">军事作战</option>
<option value="555.11974">门店安全&#183;防损</option>
<option value="555.11914">其他(安全&#183;防护类)</option>
<option value="555.11805">消防与救援</option>
<option value="555.11762">狱警</option>
</optgroup>
[解决办法]


declare @str varchar(200)
set @str='<option value="555.14879">安全情报与分析</option>'
declare @s varchar(100)
set @s=''
while(@str<>'')
begin
if patindex('%['+nchar(19968)+'-'+nchar(40891)+']%',substring(@str,1,1))<>0
  set @s=@s+substring(@str,1,1)
set @str=stuff(@str,1,1,'')
end

[解决办法]

with tb(a) as (
select '<optgroup label="安全·防护类" class="categoryParentItem">' union all
select '<option value="555.11961">保安</option>' union all
select '<option value="555.11769">海关与入境</option>' union all
select '<option value="555.11718">机场安全检查</option>' union all
select '<option value="555.11926">警察执法</option>' union all
select '<option value="555.11879">军事作战</option>' union all
select '<option value="555.11974">门店安全&#183;防损</option>' union all
select '<option value="555.11914">其他(安全&#183;防护类)</option>' union all
select '<option value="555.11805">消防与救援</option>' union all
select '<option value="555.11762">狱警</option>'
)
select *,
substring(a,convert(int,PATINDEX('%[吖-座]%',a)),len(a)-PATINDEX('%[吖-座]%',reverse(a))-PATINDEX('%[吖-座]%',a)+2)
from tb


这个可以获取汉字,只是括号不行...
比如倒数第三条只能获取
其他(安全&#183;防护类   
等大版解决了
[解决办法]
叶子的博客:
http://blog.csdn.net/maco_wang/article/details/6260197
http://blog.csdn.net/maco_wang/article/details/2597478
[解决办法]

declare @str varchar(200)
set @str='<option value="555.14879">安全情报与分析</option>'
declare @s varchar(100)
set @s=''
while(@str<>'')
begin
if PATINDEX('%[吖-座]%',substring(@str,1,1))>0 
  set @s=@s+substring(@str,1,1)
set @str=stuff(@str,1,1,'')
end
select @s

刚刚没测试过,现在这个应该可以了,你自己可以写个函数,把@str弄成参数传递
[解决办法]
DECLARE @a TABLE(id INT,b VARCHAR(100))
INSERT @a SELECT 1,'<option value=""555.14879"">安全情报与分析</option>'
UNION ALL SELECT 2,'<option value=""555.11961">保安</option>'
UNION ALL SELECT 3,'<option value=""555.11769"">海关与入境</option>'


UNION ALL SELECT 4,'<option value=""555.11914"">其他(安全&#183;防护类)</option>'



SELECT REPLACE(PARSENAME(REPLACE(REPLACE(b+' ','>','.'),'"',''),2),'</option','') FROM @a



--result
/*
                                                                                                                                                                                                                                                                 
----------------------------------------
安全情报与分析
保安
海关与入境
其他(安全&#183;防护类)

(所影响的行数为 4 行)

*/

热点排行