SQL的cross apply查询很好用,sql的split函数

这篇博客介绍了如何使用SQL自定义函数splitToTable将一个人员的多个岗位信息,以逗号分隔的字符串形式拆分成单独的记录。通过outer apply操作,实现了从员工表中按岗位字段拆分数据并与工作岗位表进行关联查询,简化了数据处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们检测线系统一个employee有多个gangwei,用的逗号分隔的简单形式没单独存表,sGangWei存着这个人的岗位,用逗号分隔。

有一个sql函数splitToTable,传入字符串和分隔符,会拆出来表。

--拆分字符串为临时表,海宏软件,周承昊,20150811
CREATE function [dbo].[splitToTable](@str varChar(1000), @split varChar(10)=',')
returns @RTable table
	(
		sValue varChar(100),
		nIndex int
	)
as Begin
	declare @debug bit
	select @debug=0
	if (@debug=1) select @str='1,2,3,45,6'
	if @split='' select @split=','

	declare @ix int, @pos int, @s varchar(1000), @nIndex int
	select @pos=1, @ix=1, @nIndex=0 
	while @ix>0
	begin
		set @ix=charindex(',', @str, @pos)
		if @ix>0
			set @s=substring(@str, @pos, @ix-@pos)
		else
			set @s=substring(@str, @pos, len(@str))
		
		set @s=ltrim(rtrim(@s))
		
		-- print @str
		insert into @RTable(sValue, nIndex) values(@s, @nIndex+1)
		
		select @pos=@ix+1, @nIndex=@nIndex+1
	end
	
	return
end
/*	--用法:
	select * from dbo.splitToTable('1,2,3,678,9,,2',',')
*/
GO


select * from dbo.splitToTable('GW004,GW006,GW007', ',')

select employee.sID, employee.sName, Employee.sGangWei, jobs.* 
	from employee outer apply dbo.splitToTable(employee.sGangWei, ',') as jobs

 可见,cross apply比较省事的调用了dbo.splitToTable函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值