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

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

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

 

方式一:通过charindex和substring。 

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
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', ',')

结果:

     2010081708430210.jpg

 

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

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
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', ',')

结果:

     2010081708462936.jpg

 

 

 

转载于:https://www.cnblogs.com/eleven11/archive/2010/08/17/1800901.html

你可能感兴趣的文章
快速安装配置zabbix_agent端
查看>>
DNS服务的配置与管理(5) 配置转发器
查看>>
AIP(Azure 信息保护)之一:启用与激活服务
查看>>
一步步学WebSocket(3)WebSocket协议格式
查看>>
linux更新内核
查看>>
通过mdadm命令调用内核MD模块实现软Raid
查看>>
为RemoteApp的登录用户(域用户)添加输入法的方法
查看>>
分享Open-E DSS V7 应用系列十篇!
查看>>
分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
查看>>
javascript框架概览备忘
查看>>
产品与技术(人员)间的职责关系
查看>>
企业云桌面-13-为企业新建组织单位
查看>>
SystemCenter2012SP1实践(5)SCVMM管理HyperV
查看>>
Ext JS添加子组件的误区
查看>>
微软私有云分享(R2)27维护窗口的使用
查看>>
Mac 平台下功能强大的Shimo软件使用指南
查看>>
永远不要对一个外行聊你的专业
查看>>
MySQL学习四部曲
查看>>
SCCM 2012 R2实战系列之一:SQL安装
查看>>
windows下安装memcached
查看>>