SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
来源:互联网 发布:worknc软件怎么样 编辑:程序博客网 时间:2024/06/06 05:43
Create
FUNCTION
[dbo].[SplitToTable]
(
@SplitString nvarchar(
max
),
@Separator nvarchar(10)=
' '
)
RETURNS
@SplitStringsTable
TABLE
(
[id]
int
identity(1,1),
[value] nvarchar(
max
)
)
AS
BEGIN
DECLARE
@CurrentIndex
int
;
DECLARE
@NextIndex
int
;
DECLARE
@ReturnText nvarchar(
max
);
SELECT
@CurrentIndex=1;
WHILE(@CurrentIndex<=len(@SplitString))
BEGIN
SELECT
@NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
IF(@NextIndex=0
OR
@NextIndex
IS
NULL
)
SELECT
@NextIndex=len(@SplitString)+1;
SELECT
@ReturnText=
substring
(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
INSERT
INTO
@SplitStringsTable([value])
VALUES
(@ReturnText);
SELECT
@CurrentIndex=@NextIndex+1;
END
RETURN
;
END
select
*
FROm
dbo.SplitToTable(
'111,b2222,323232,32d,e,323232f,g3222'
,
','
)
结果为
id value ----------- ---------------------------------------
1 111
2 b2222
3 323232
4 32d
5 e
6 323232f
7 g3222
(7 行受影响)
使用循环的方法
首先GetSplitLength函数返回分割后的字符数组的长度。
Create
function
[dbo].[GetSplitLength]
(
@String nvarchar(
max
),
--要分割的字符串
@Split nvarchar(10)
--分隔符号
)
returns
int
as
begin
declare
@location
int
declare
@start
int
declare
@length
int
set
@String=ltrim(rtrim(@String))
set
@location=charindex(@split,@String)
set
@length=1
while @location<>0
begin
set
@start=@location+1
set
@location=charindex(@split,@String,@start)
set
@length=@length+1
end
return
@length
end
select dbo.GetSplitLength('111,b2222,323232,32d,e,323232f,g3222',',')
结果为7。
GetSplitOfIndex函数是按顺序分别获取分割后的字符串。
ALTER
function
[dbo].[GetSplitOfIndex]
(
@String nvarchar(
max
),
--要分割的字符串
@split nvarchar(10),
--分隔符号
@
index
int
--取第几个元素
)
returns
nvarchar(1024)
as
begin
declare
@location
int
declare
@start
int
declare
@
next
int
declare
@seed
int
set
@String=ltrim(rtrim(@String))
set
@start=1
set
@
next
=1
set
@seed=len(@split)
set
@location=charindex(@split,@String)
while @location<>0
and
@
index
>@
next
begin
set
@start=@location+@seed
set
@location=charindex(@split,@String,@start)
set
@
next
=@
next
+1
end
if @location =0
select
@location =len(@String)+1
return
substring
(@String,@start,@location-@start)
end
select dbo.GetSplitOfIndex('111,b2222,323232,32d,e,323232f,g3222',',', 3)
结果323232。
DECLARE
@Tags nvarchar(
max
);
SELECT
@Tags=
'111,b2222,323232,32d,e,323232f,g3222'
;
DECLARE
@Tag nvarchar(1000)
DECLARE
@
next
int
;
set
@
next
=1
DECLARE
@Length
int
;
SELECT
@Length=dbo.GetSplitLength(@Tags,
','
)
while @
next
<=@Length
begin
SET
@Tag =
left
(dbo.GetSplitOfIndex(@Tags,
','
,@
next
), 16);
print @Tag
SET
@
Next
=@
Next
+1;
END
结果为:
111
b2222
323232
32d
e
323232f
g3222
阅读全文
0 0
- SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
- SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
- SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
- SQL自定义函数split分隔字符串
- 定义自定义表值函数(split),用于分隔字符串
- 用Split函数分隔字符串
- Oracle split(分隔字符串函数)
- oracle字符串分隔函数split
- 一个扩展后的Split方法,可根据字符串分隔字符,返回字符数组
- sql 字符串分隔函数
- sql字符串分隔函数
- Oracle 实现 split 函数 (返回数组)
- oracle 实现 split 函数 (返回数组)
- oracle 实现 split 函数 (返回数组)
- oracle 实现 split 函数 (返回数组)
- Delphi字符串分隔(似split函数功能)
- SQL 自定义Split函数
- SQL 自定义Split函数
- call+apply
- 商城首页的展示方法
- 分布式机器学习平台大比拼:Spark、PMLS、TensorFlow、MXNet
- 全球开发者各出奇招:我们想这样适配iPhone X
- MacBook VMWare Fusion 安装Centos6
- SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
- math类的常用方法
- H5实战(五):幽灵按钮效果
- 解决Ubuntu安装后无法联网的问题-网卡驱动为安装成功
- Linux 常用命令重命名 并设置为全局变量
- XListView加头布局ViewPager轮播
- hibernate 链接Mysql数据库小案例
- 中值定理
- MFC EditControl控件实现换行且滚动条自动跟随(实例)