最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

sqlserver拆分字符串函数及应用

来源:动视网 责编:小采 时间:2020-11-09 16:28:26
文档

sqlserver拆分字符串函数及应用

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]
推荐度:
导读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]


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为数据表唯一字段标识

文档

sqlserver拆分字符串函数及应用

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]
推荐度:
标签: 应用 sql 拆分
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top