您的位置:首页 > 数据库

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

2015-08-19 16:10 363 查看
再设计表的时候我们经常遇到这样的情况,字段的值为1,2,3,4

等字符隔开的情况,存的是数字,但是显示的时候是对应的类别,直接上图,清楚明了,


如何想得到


分两步完成,步骤如下:

第一步先创造 一个表值函数,将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

第二步 创建标量函数 ,这步比较重要,由于这些标量函数也不经常用到,总感觉能实现就是还没想好思路,也就是多行转一行的啦,


代码如下: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

这样就大功搞成了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: