博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql把逗号分隔的字符串拆成临时表
阅读量:5112 次
发布时间:2019-06-13

本文共 1176 字,大约阅读时间需要 3 分钟。

    在与数据库交互的过程中,我们经常需要把一串ID组成的字符串当作参数传给存储过程获取数据。很多时候我们希望把这个字符串转成集合以方便用于in操作。 有两种方式可以方便地把这个以某种符号分隔的ID字符串转成临时表。

方式一:通过charindex和substring。

4331f8f9b98f8d4cd8f9fd1a.jpg
代码
 
create function func_splitstring
( @str nvarchar ( max ), @split varchar ( 10 ))
returns @t Table (c1 varchar ( 100 ))
as
begin
declare @i int
declare @s int
set @i = 1
set @s = 1
while ( @i > 0 )
begin
set @i = charindex ( @split , @str , @s )
if ( @i > 0 )
begin
insert @t (c1) values ( substring ( @str , @s , @i - @s ))
end
else begin
insert @t (c1) values ( substring ( @str , @s , len ( @str ) - @s + 1 ))
end
set @s = @i + 1
end
return
end

执行:select * from dbo.func_splitstring('1,2,3,4,5,6', ',')

结果:

     de39420e7c3a0b696159f31a.jpg

方式二:通过XQuery(需要SQL Server 2005以上版本)。

a42c362c7de9f477359bf71a.jpg
代码
 
create function func_splitid
( @str varchar ( max ), @split varchar ( 10 ))
RETURNS @t Table (c1 int )
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT (XML, ' <items><item id=" ' + REPLACE ( @str , @split , ' "/><item id=" ' ) + ' "/></items> ' )
INSERT INTO @t SELECT x.item.value( ' @id[1] ' , ' INT ' ) FROM @x .nodes( ' //items/item ' ) AS x(item)
RETURN
END

执行:select * from dbo.func_splitid('1,2,3,4,5,6', ',')

结果:

     f0ee103af67615a914cecb1a.jpg

类别:  

转载于:https://www.cnblogs.com/dreamontheway/archive/2010/08/19/1809972.html

你可能感兴趣的文章
dd命令 建立两颗一模一样的磁盘
查看>>
常用的jquery触屏手机页面特效代码下载
查看>>
background-clip,background-origin
查看>>
C# 如何创建一个Windows服务
查看>>
集群和分布式区别
查看>>
Android(java)学习笔记153:采用post请求提交数据到服务器(qq登录案例)
查看>>
Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
虚拟主机与虚拟目录学习小结
查看>>
hlg1414安装雷达【贪心】
查看>>
Blog文章待看
查看>>
Golang flag包使用详解(一)
查看>>
python文件IO
查看>>
regsvr32简介
查看>>
升级到 .NET Core 2.1
查看>>
C#多线程交替赋值取值
查看>>
对Java前四章的感受
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
密码学总结
查看>>