视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
sqlserver拆分字符串函数及应用
2020-11-09 16:28:26 责编:小采
文档


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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[f_splitSTR](
	@s varchar(8000), --待分拆的字符串
	@split varchar(10) --数据分隔符
)RETURNS @re TABLE(
	col varchar(max))
AS
BEGIN
	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为数据表唯一字段标识

下载本文
显示全文
专题