sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值

需求:

 

 

需要的是将上面的表中的name值分别取出来,以列的形式形式展示

如下:

 

 

 

 

 

 方法:

这里实现这个,说实话,我网上也找了很久,也是借鉴了别人的,所以就自己在这里保存一份

这里我是使用函数的方式来实现的

CREATE function [dbo].[SplitSubString]
(
 @Expression varchar(8000)
,@Delimiter varchar(100)
,@ int
)
returns varchar(8000)
as
begin


declare @p int,
        @temp varchar(8000)
set @p = CharIndex(@Delimiter,@Expression)
set @temp = @Expression
if @p > 0
begin
   set @p = @p + len(@Delimiter) - 1
end
declare @i int
set @i = 1
while @i < @
begin  
   set @i = @i + 1
   set @Expression = substring (@Expression, @p + 1,len(@Expression) - @p )
   set @p = CharIndex(@Delimiter,@Expression)
   if @p > 0
       begin
          set @p = @p + len(@Delimiter) - 1
       end
   else
       begin
          break
       end
end

declare @s varchar(1000)
if @p = 0 and @i = @
begin
    if @ > 1
    begin
        if len(@Expression) < len(@temp)
        begin
            set @s=@Expression
        end
        else
            begin
                set @s = null
            end
    end
    else
        begin
            set @s=@Expression
        end
end
else if @i = @
begin
   set @s = substring(@Expression, 1,@p - len(@Delimiter))
end
return @s
end


GO

使用方式:

SELECT ID,
name,
classname,
dbo.SplitSubString(name,',',1) nama1,
dbo.SplitSubString(name,',',2) nama2,
dbo.SplitSubString(name,',',3) nama3
FROM  dbo.STUDENT_CLASS

说明:直接用这个函数SplitSubString 第一个参数 是需要分割的字段,第二个参数是 中间的分割符号,第三个参数表示的是显示的位置从1开始

但是:列里面的值数量不对齐的话,那么

sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值_第1张图片

 

 

 用上面的查出来的,就会少一个

sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值_第2张图片

 

 或者 一个为null值(对于取值这个应该没关系)

sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值_第3张图片

 

 所以,这个使用的话,就实际情况而定。

组后附上一个,查询列值中的某个字符的个数sql

select *,
len(name)-len(replace(name, ',', ''))+1 '逗号的个数' 
from STUDENT_CLASS

结果:

sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值_第4张图片

 

 

 

 

 

你可能感兴趣的:(sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值)