sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,

时间:2022-07-03 10:27:59

再设计表的时候我们经常遇到这样的情况,字段的值为1,2,3,4sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行, 等字符隔开的情况,存的是数字,但是显示的时候是对应的类别,直接上图,清楚明了,



sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,如何想得到 sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行, 分两步完成,步骤如下:

第一步先创造 一个表值函数,将1,2,3,4 转化为sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,


函数是从网上找来的,代码如下:

create FUNCTION [dbo].[fn_Split](      
 @String nvarchar (max),      
 @Delimiter nvarchar (10)      
)      
RETURNS @ValueTable TABLE ([Value] NVARCHAR(max),[id] int)      
BEGIN      
 DECLARE @NextString nvarchar(max),      
  @Pos int,      
  @NextPos int,      
  @CommaCheck nvarchar(1),    
 @id int    
    
set @id=1      
       
 SET @NextString = ''      
 SET @CommaCheck = right(@String,1)       
       
 SET  @String = @String + @Delimiter      
       
  SET @Pos = CHARINDEX(@Delimiter,@String)      
  SET @NextPos = 1      
       
 WHILE (@pos <>  0)        
 BEGIN      
  SET @NextString = SUBSTRING(@String,1,@Pos - 1)      
        
  INSERT INTO @ValueTable ( [Value],[id]) VALUES (@NextString,@id)      
        
  SET @String = SUBSTRING(@String,@pos +1,LEN(@String))      
         
  SET @NextPos = @Pos      
  SET @pos  = CHARINDEX(@Delimiter,@String)      
    
 set @id = @id +1    
 END      
       
 RETURN      
END  
 

GO

第二步 创建标量函数  ,这步比较重要,由于这些标量函数也不经常用到,总感觉能实现就是还没想好思路,也就是多行转一行的啦,sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,


代码如下:ALTER FUNCTION [dbo].[GetBiontionName](@nodeId varchar(64))
RETURNS varchar(64)
AS

BEGIN
declare @name varchar(64)
 set @name=(select  name+',' from GWT_Biont where cast(id as varchar) in (SELECT CAST(value AS INT) FROM dbo.fn_Split(@nodeId, ',')) for xml path('') )
 return  substring(@name,1,len(@name)-1)

END

GO

这样就大功搞成了sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,