设为首页 加入收藏

TOP

sql将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,
2015-11-21 01:29:09 来源: 作者: 【 】 浏览:0
Tags:sql 相应 分隔 函数 一行

再设计表的时候我们经常遇到这样的情况,字段的值为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



这样就大功搞成了\

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇T-SQL 一次插入多行数据 下一篇SQL Server 2016里TempDb的提升

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: