SQL Server是实现split函数分割字符串实例

SQL Server是实现split函数分割字符串实例

3952发表于2017-04-29

数据库存储有以下数据:

多个数据用一个分割符存在一个字段里面。查询的时候要把这些数据拆分成多行,然后去查对应编号对应的值。我们知道在C#或Java里面都有一个split函数,把字符串按指定的分割符拆分。比如上面"41004/41005"折成

41004

41005

下面我结合一个自定义sql函数来实现拆分功能:

create function f_split(@c varchar(2000),@split varchar(2))
	returns @t table(col VARCHAR(500))
as
begin
while(charindex(@split,@c)<>0)
	begin
		insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
		set @c = stuff(@c,1,charindex(@split,@c),'')
	end
	insert @t(col) values (@c)
	return
end
go 
上面使用了表值函数。这个函数就可以当成一个表来查询,具体调用方法:

select * from dbo.f_split('31002/31007/31008','/')
返回结果:


最后,举一个更复杂的例子。

我们要把"41004/41005"转成名称ql语句要怎么写呢?

"41004/41005"是员工编号,我们要多显示一列,把员工姓名也显示出来同样的多个员工要用“/”拼接起来。

sql语句如下:

select a.EquipmentNo
,(SELECT e.Name+',' FROM Employee e WHERE e.CodeNo IN(
	select * from dbo.f_split(a.EmployeeNo,'/')
) FOR XML PATH('')) AS EmployeeName
FROM ProductWorkProcess a 



小编蓝狐