sqlserver 中将存入值编码‘1,2,3’查询返回编码对应名称‘张三,李四,王五’

发布时间 2023-11-24 16:05:29作者: ITMrRight

1.新建函数

ALTER FUNCTION [dbo].fn_splitStr( @strSource NVARCHAR(4000),@strSeparator NVARCHAR(10) )
RETURNS @tbResult TABLE(id INT IDENTITY(1,1),rs NVARCHAR(1000))
AS
BEGIN
DECLARE @dwIndex INT,@strResult NVARCHAR(1000),@dwSeparatorLen INT=LEN(@strSeparator);
SET @dwIndex = CHARINDEX(@strSeparator,@strSource);-- 取得第一个分隔符的位置
WHILE @dwIndex>0
BEGIN
SET @strResult = LEFT(@strSource,@dwIndex-1);
INSERT @tbResult VALUES(@strResult);

--将要操作的字符串去除已切分部分
SET @strSource = SUBSTRING(@strSource,@dwIndex+LEN(@dwIndex),LEN(@strSource));
SET @dwIndex = CHARINDEX(@strSeparator,@strSource); --循环量增加
END
--处理最后一节
IF LEN(@strSource) > 0 INSERT @tbResult VALUES(@strSource)
RETURN;
END

2.使用后

 

3.原sql

select
STUFF((select ',' +ProcessName from mes_Process where ProcessCode in (select rs from fn_splitStr(a.ProcessCode,',')) for xml path('')),1,1,'')ProcessName,
* from [dbo].[mould_MaterialBindMould] a where 1=1