SQL字符串转数组

一、环境 SQL server 2000

 

二、需求:一张表 servicecategorydetail.bufin  存储的是 humres 表中的id,存储形式为字符串并逗号‘,’分割,想通过in的方式查询 servicecategorydetail.bufin 中信息。

 

       1.执行SQL 

select bufin from servicecategorydetail

 

SQL字符串转数组_第1张图片

      2.执行SQL 

           

select  t1.bufin,
buFin2 = STUFF( (select ',' + objno from humres where id in (t1.bufin) FOR XML PATH('') ), 1, 1, '') 
from servicecategorydetail t1

SQL字符串转数组_第2张图片

       

       发现,多个值逗号拼接 8a7f4fd7651370ce0165137d19bd3bc7,8a7f4fd7651370ce0165137ea4374289 in方式不生效,即使 处理加上了 单引号,   '8a7f4fd7651370ce0165137d19bd3bc7','8a7f4fd7651370ce0165137ea4374289', 也不生效。那是因为,获取的结果 bufin 是字符串,而 in 中需要使用数组。

 

三、解决,字符串转数组,自定义函数 :字符串 循环截取法 function

   

  CREATE FUNCTION F_SplitSTR(
    @string varchar(8000), --待分拆的字符串
    @symbol varchar(10)     --数据分隔符
) RETURNS @table TABLE(col varchar(100))
AS
    BEGIN
        DECLARE @splitlen int
        SET @splitlen = LEN(@symbol) - 1
        WHILE CHARINDEX(@symbol, @string) > 0
            BEGIN
                INSERT @table VALUES (LEFT(@string, CHARINDEX(@symbol, @string) - 1))
                SET @string = STUFF(@string, 1, CHARINDEX(@symbol, @string) + @splitlen, '')
            END
        INSERT @table VALUES (@string)
        RETURN
    END

   1.执行SQL :

select 
t1.bufin,
buFin2 = STUFF( (select ',' + objno from humres where id in (select * from F_SplitSTR(t1.bufin,',')) FOR XML PATH('') ), 1, 1, '') 
from servicecategorydetail t1

     2.结果如下:

SQL字符串转数组_第3张图片

 

四、扩展

1.在处理时,发现执行SQL

SELECT F_SplitSTR(bufin,',') from servicecategorydetail

2.出现错误:[FreeTDS][SQL Server]'F_SplitSTR' is not a recognized built-in function name.

SQL字符串转数组_第4张图片

 

3.换做查询方式即可;

select *  FROM F_SplitSTR((select top 1 bufin from servicecategorydetail), ',')

          4.结果如下

SQL字符串转数组_第5张图片

 

五:尊重别人的知识产权,参考如下:

     你想点我吗?

 

 

 

       

 

你可能感兴趣的:(SQLServer,SQL,Server)