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

字符串提取有关问题

2012-12-31 
字符串提取问题本帖最后由 itsong 于 2012-11-07 20:41:10 编辑有一列数据,内容为某单位01 姓名、某某单

字符串提取问题
本帖最后由 itsong 于 2012-11-07 20:41:10 编辑 有一列数据,内容为"某单位01 姓名"、"某某单位101 姓名”……
内容特征是先为长度不等的汉字,随后为一组长度不等的阿拉伯数字作为编号,紧接着是空格
实现目标:将该列输出为三列内容,单位名称,编号,姓名
好像SQL SERVER自身不支持正是表达式,使用CLR倒是可以做用户自定义函数实现正则表达式,但不更于部署和数据的转移,求高手指点更好解决办法
[解决办法]

declare @str varchar(50)
set @str='上海市办事处客户办工单位00100 诸葛財大气粗'
select left(@str,patindex('%[0-9]%',@str)-1) as 单位,
SUBSTRING(@str,patindex('%[0-9]%',@str),LEN(@str)-len(left(@str,patindex('%[0-9]%',@str)-1))-len(right(@str,patindex('%[0-9]%',reverse(@str))-1))) as 编号,
right(@str,patindex('%[0-9]%',reverse(@str))-1) as 姓名

[解决办法]
declare @str varchar(50)
set @str='某某单位101 姓名'


select substring(@str,1,patindex('%[0-9]%',@str)-1) as 单位,
      
       substring(@str,patindex('%[0-9]%',@str),len(@str)-patindex('%[ ]%',reverse(@str))-(patindex('%[0-9]%',@str)-1))as 编号,

       right(@str,patindex('%[0-9]%',reverse(@str))-1) as 姓名

/*
------ -------- -------
单位      编号      姓名
某某单位 101  姓名

*/

[解决办法]
declare @str varchar(255)
set @str='四川省委101 姓名'
select 
left(@str,patindex('%[0-9]%',@str)-1) as Company,
SUBSTRING(@str,patindex('%[0-9]%',@str),LEN(@str)-patindex('%[0-9]%',@str)+2-patindex('%[0-9]%',REVERSE(@str))) as Userid,
RIGHT(@str,CHARINDEX(' ',REVERSE(@str))-1) as 姓名
/*
CompanyUserid姓名
四川省委101姓名
*/

[解决办法]
select LEFT(列名,b.number), 
SUBSTRING(列名, b.number+1,c.number-b.number),
right(列名,len(列名)-c.number),
a.* from 表名 a,master..spt_values  b,master..spt_values  c
WHERE  b.type='P' and c.type='P' 
and ASCII(substring(列名,b.number,1))>128 and ASCII(substring(列名,b.number+1,1))<128
and ASCII(substring(列名,c.number+1,1))=32
 

热点排行
Bad Request.