关于Sqlserver的拼接字符串和切割字符串

   我遇到的问题是需要根据A表中的a字段字符串在B表中查询出对应数据。其中a中的字符串是B表中b(int类型)字段的数据拼接。

其中 表A数据

表B数据

如果我们直接 select * from b where in(select a from A),查询会报从数据类型 nvarchar 转换为 bigint 时出错。很烦!so,我想我应该第一步解决将A表中的字段a切割一下。嗯.....所以我在网上找了有个sqlserver切割字符串的方法

一、切割字符串

Create FUNCTION [dbo].[f_splitSTR](  
    @s   varchar(8000),   --待分拆的字符串  
    @split varchar(10)     --数据分隔符  
)RETURNS @re TABLE(  
        col varchar(max))  
AS  
BEGIN  
    DECLARE   
        @splitlen int  
  
    -- 取分隔符的长度, 在分隔符后面加一个字符是为了避免分隔符以空格结束时, 取不到正确的长度  
    SET @splitlen = LEN(@split + 'a') - 2  
    -- 如果待分拆的字符串中存在数据分隔符, 则循环取出每个数据项  
    WHILE CHARINDEX(@split, @s)>0  
    BEGIN  
        -- 取第一个数据分隔符前的数据项  
        INSERT @re VALUES(LEFT(@s, CHARINDEX(@split, @s) - 1))  
          
        -- 将已经取出的第一个数据项和数据分隔符从待分拆的字符串中去掉  
        SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')  
    END  
      
    -- 保存最后一个数据项(最后一个数据项后面没有数据分隔符, 故在前面的循环中不会被处理)  
    INSERT @re VALUES(@s)  
    RETURN     
  end  

 使用方法一:select * from dbo.f_splitSTR('2,3',',')a

上图1

使用方法二:select (select col from dbo.f_splitSTR(a,',') where col=3) as aa from A

上图2

注意,如果不用where条件会报错

然而,我并不想加where条件,我需要的是根据 where b in 的查询...并且再再加查询结果拼接一下..嗯,根据这个错误,我觉得我写的是对的,只需要将结果拼接一下。于是我百度了一下sqlserver拼接方法。

贴上百度结果http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html (for xml path使用方法)

二、sqlserver 拼接列

关于拼接列的直接操作参考https://www.cnblogs.com/qianxingdewoniu/p/7118901.html

ok,我已经迫不及待贴上我的混合大法了....

混元大法:
select  a,(select Name+',' from B where Id In(select col from dbo.f_splitSTR(a,',')) for xml path('') ) aa  from   A

上图

emmmm。。。。。see u

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值