当前位置:  数据库>sqlserver

字符串分割函数应用-拆分成多行

    来源: 互联网  发布时间:2014-08-29

    本文导语:  字符串分割函数应用-拆分成多行 --字符串拆分成行 declare @str varchar(8000) set @str = 'a1,b1,c2,d1,e3,f5' --,换成 union all select set @str = 'select name='''+replace(@str,',',''' union all select ''')+'''' exec(@str) /*name ---- a1 b1 c2 d1 e3 f5 */ ...

字符串分割函数应用-拆分成多行

--字符串拆分成行
declare @str varchar(8000) 
set @str = 'a1,b1,c2,d1,e3,f5' 
--,换成 union all select
set @str = 'select name='''+replace(@str,',',''' union all select ''')+'''' 
exec(@str)

/*name 
---- 
a1
b1
c2
d1
e3
f5
*/

--字符串分割函数--拆分成多行
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp 
table(F1 varchar(100))
as
begin 
declare @i int 
set @SourceSql=rtrim(ltrim(@SourceSql)) 
set @i=charindex(@StrSeprate,@SourceSql) 
while @i>=1 
begin  
insert @temp values(left(@SourceSql,@i-1))  
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)  
set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql''     
insert @temp values(@SourceSql) 
return end

--示例
declare @SourceSql varchar(8000),@StrSeprate varchar(10)
select @SourceSql='1,2,3,4,5',@StrSeprate=','
select * from dbo.f_splitstr(@SourceSql,@StrSeprate)

--结果
/*
F1
-- 
1
2
3
4
5
(所影响的行数为 5 行)
*/
 
-- XML  

DECLARE @str VARCHAR(4000)
SET @str= '12,13,14,16,44,46,47'
Declare @x XML 
select @x = cast(''+ replace(@str,',','')
+ '' as xml)
      
select t.value('.', 'int') as inVal
from @x.nodes('/A') as x(t)

/*
inVal:
12
13
14
16
44
46
47
*/ 

 DECLARE @str VARCHAR(4000)
SET @str= '12,大幅度,14,16,高度,46,47'
Declare @x XML 
select @x = cast(''+ replace(@str,',','')
+ '' as xml)
      
select t.value('.', 'VARCHAR(40)') as inVal
from @x.nodes('/A') as x(t)

/*
inVal
----------------------------------------
12
大幅度
14
16
高度
46
47

(7 行受影响)
*/

 alter procedure Proc_InsertSendApi(
    @userid       int,
    @sendid       int,
    @Phone        nvarchar(max),
    @message      nvarchar(300),
    @senttime     datetime,
    @batchid      bigint
)
as
begin
    declare @str nvarchar(max)
    set @str = @Phone
    declare @x     xml,
            @p     varchar(11)
    
    select @x = cast('' + replace(@str, ',', '')
 + '' as xml)     
    
    begin
        set arithabort on
        
        insert into Send_Api
          (
            UserId,
            PartnersCode,
            SendId,
            Phone,
            [Message],
            SentTime,
            CreateTime,
            BatchId
          )
        select @userid, 35, @sendid, t.value('.', 'varchar(11)'),
               @message, @senttime, getdate(), @batchid
        from   @x.nodes('/A') as x(t)
    end
end

表:
Id    Name    Category
1    哈利波特    奇幻,外文,魔法
2    神雕俠侶    武俠,現代
3    西遊記    奇幻,古文

结果:
1    哈利波特    奇幻
1    哈利波特    外文
1    哈利波特    魔法
2    神雕俠侶    武俠
2    神雕俠侶    現代
3    西遊記    奇幻
3    西遊記    古文

CREATE FUNCTION fnConvertXmlToTable(@ID INT)
RETURNS @Table TABLE(Category NVARCHAR(10))
AS
BEGIN
    DECLARE @Xml XML;
    --将逗号 Replace 成,最前面加入及最后面再加入
    SELECT TOP 1 @Xml =CAST('' + REPLACE(Category , ',', '') + '' AS XML)
    FROM dbo.Books
    WHERE ID = @ID
    INSERT INTO @Table(Category)
    SELECT col.value('.', 'nvarchar(10)')
    FROM @Xml.nodes('/Category') Doc(col)
    RETURN
END

SELECT a.ID, a.Name, b.Category FROM Books a
CROSS APPLY dbo.fnConvertXmlToTable(a.ID) b
ORDER BY a.ID

转载:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638171.html


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个字符串分割来存到DB中的问题:如何避免一个汉字被从中间分割掉?
  • JAVA里有没有可以按指定分割符分割字符串的函数?具体怎么用?
  • php字符串分割函数explode实例
  • 字符串分割成数组
  • 字符串分割类 StringSpliter iis7站长之家
  • 字符串分割类 StringSpliter
  • SHELL 分割字符串的问题
  • 如何分割字符串赋给一个数组变量并打印?
  • c# split分割字符串的例子
  • php+正则将字符串中的字母数字和中文分割
  • 有个小问题,如何将一字符串按一定规则分割成字符串数组?
  • php通过数组实现多条件查询实现方法(字符串分割)
  • sqlserver中根据字符分割字符串的最好的写法分享
  • 帮帮忙,关于分割字符串后的赋值
  • SQL语句 一个简单的字符串分割函数
  • php中利用explode函数分割字符串到数组
  • Python 字符串操作实现代码(截取/替换/查找/分割)
  • Java怎样分割字符串,有没有Perl或者VB一样的Split方法?
  • 关于字符串分割!高手请进!
  • 再问:如何分割字符串赋给一个数组变量并打印?
  • C++ Strings(字符串) 成员 size():返回字符串中字符的数量
  • 关于字符串的操作,我想得到字符串的长度,和他开始两位组成的新的字符串,例如::
  • C++ Strings(字符串) 成员 c_str():将字符串以C字符数组的形式返回
  • 如何使GDB显示完整的字符串变量,当字符串比较长时。
  • C++ Strings(字符串) 成员 empty():如果字符串为空,返回真
  • php判断字符串在另一个字符串位置的方法
  • C++ Strings(字符串) 成员 length():返回字符串的长度
  • 请教,有关16进制字符串形成2进制字符串的问题!
  • C++ Strings(字符串) 成员 resize():重新设置字符串的大小
  • shell程序:在大文件中查找特定字符串,但该字符串可以跨行
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3