您好,欢迎访问一九零五行业门户网

sqlserver拆分字符串函数 及应用

use [datachange]go/****** object: userdefinedfunction [dbo].[f_splitstr] script date: 05/09/2016 15:04:21 span style=color:#ff0000;自己修改数据库名,直接执行就可以了/span******/set ansi_nulls ongoset quoted_identifier ongoalter function [d
use [datachange]go/****** object: userdefinedfunction [dbo].[f_splitstr] script date: 05/09/2016 15:04:21 自己修改数据库名,直接执行就可以了******/set ansi_nulls ongoset quoted_identifier ongoalter function [dbo].[f_splitstr]( @s varchar(8000), --待分拆的字符串 @split varchar(10) --数据分隔符)returns @re table( col varchar(max))asbegin declare @splitlen int -- 取分隔符的长度, 在分隔符后面加一个字符是为了避免分隔符以空格结束时, 取不到正确的长度 set @splitlen = len(@split + 'a') - 2 -- 如果待分拆的字符串中存在数据分隔符, 则循环取出每个数据项 while charindex(@split, @s)>0 begin -- 取第一个数据分隔符前的数据项 insert @re values(left(@s, charindex(@split, @s) - 1)) -- 将已经取出的第一个数据项和数据分隔符从待分拆的字符串中去掉 set @s = stuff(@s, 1, charindex(@split, @s) + @splitlen, '') end -- 保存最后一个数据项(最后一个数据项后面没有数据分隔符, 故在前面的循环中不会被处理) insert @re values(@s) return end
应用sql:实现数据分割 如数据:
b41j-002/145%b41j-002/15%b41j-003/36%b41j-000/00%b43k-001/00%b41j-002/045%b41j-002/055%b41j-002/21%b43k-008/00%b81b-007/04%b43k-029/00%b43k-027/00%b43k-029/093  
取每一组%数据中的前一位组合起来用%分割 得到数据为
b%b%b%b%b%b%b%b%b%b%b%b%b
update [datachange].[dbo].[patent_info] set ipc_all1 = temp.ipc1 from ( select pub_no,ipc1 = stuff( (select '%'+ltrim(ipc1) from (select c.pub_no, substring(col,0,2) as ipc1 from( select b.*,a.ipc_all,a.pub_no from [datachange].[dbo].[patent_info] a cross apply [datachange].[dbo].f_splitstr(ipc_all,'%') b )c )tt where pub_no= t.pub_no for xml path('') ),1,1,'') from (select c.pub_no, substring(col,0,2) as ipc1 from( select b.*,a.ipc_all,a.pub_no from [datachange].[dbo].[patent_info] a cross apply [datachange].[dbo].f_splitstr(ipc_all,'%')b)c )t group by pub_no )temp where patent_info.pub_no = temp.pub_no
pub_no为数据表唯一字段标识
其它类似信息

推荐信息