偶然在電腦里看到以前保存的這個函數(shù),是將一個單獨字符串切分成一組字符串,這里分隔符是英文逗號“,”? 遇到其他情況只要稍加修改就好了
CREATE FUNCTION dbo.f_splitstr(
??? @str varchar(8000)
)RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))
AS
BEGIN
?/* Function body */
??? DECLARE @pos int
??? SET @pos = CHARINDEX(',', @str)
??? WHILE @pos > 0
??? BEGIN
??????? INSERT @r(value) VALUES(LEFT(@str, @pos - 1))
??????? SELECT
??????????? @str = STUFF(@str, 1, @pos, ''),
??????????? @pos = CHARINDEX(',', @str)
??? END
??? IF @str > ''
??????? INSERT @r(value) VALUES(@str)
??? RETURN
END
?截圖如下
?
2011-11-15 10:15:28
今天在園子里看到另外一個實現(xiàn)方法,不妨借鑒一下:
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
/*
by kudychen 2011-9-28
*/
CREATE
function
[
dbo
]
.
[
SplitString
]
(
@Input
nvarchar
(
max
),
--
input string to be separated
@Separator
nvarchar
(
max
)
=
'
,
'
,
--
a string that delimit the substrings in the input string
@RemoveEmptyEntries
bit
=
1
--
the return value does not include array elements that contain an empty string
)
returns
@TABLE
table
(
[
Id
]
int
identity
(
1
,
1
),
[
Value
]
nvarchar
(
max
))
as
begin
declare
@Index
int
,
@Entry
nvarchar
(
max
)
set
@Index
=
charindex
(
@Separator
,
@Input
)
while
(
@Index
>
0
)
begin
set
@Entry
=
ltrim
(
rtrim
(
substring
(
@Input
,
1
,
@Index
-
1
)))
if
(
@RemoveEmptyEntries
=
0
)
or
(
@RemoveEmptyEntries
=
1
and
@Entry
<>
''
)
begin
insert
into
@TABLE
(
[
Value
]
)
Values
(
@Entry
)
end
set
@Input
=
substring
(
@Input
,
@Index
+
datalength
(
@Separator
)
/
2
,
len
(
@Input
))
set
@Index
=
charindex
(
@Separator
,
@Input
)
end
set
@Entry
=
ltrim
(
rtrim
(
@Input
))
if
(
@RemoveEmptyEntries
=
0
)
or
(
@RemoveEmptyEntries
=
1
and
@Entry
<>
''
)
begin
insert
into
@TABLE
(
[
Value
]
)
Values
(
@Entry
)
end
return
end
使用方法
declare
@str1
varchar
(
max
),
@str2
varchar
(
max
),
@str3
varchar
(
max
)
set
@str1
=
'
1,2,3
'
set
@str2
=
'
1###2###3
'
set
@str3
=
'
1###2###3###
'
select
[
Value
]
from
[
dbo
]
.
[
SplitString
]
(
@str1
,
'
,
'
,
1
)
select
[
Value
]
from
[
dbo
]
.
[
SplitString
]
(
@str2
,
'
###
'
,
1
)
select
[
Value
]
from
[
dbo
]
.
[
SplitString
]
(
@str3
,
'
###
'
,
0
)
里面還有個自增的[Id]字段哦,在某些情況下有可能會用上的,例如根據(jù)Id來保存排序等等。
?
例如根據(jù)某表的ID保存排序:
update a set a.[Order]=t.[Id]???????
from [dbo].[表] as a join [dbo].SplitString('1,2,3', ',', 1) as t on a.[Id]=t.[Value]
具體的應用請根據(jù)自己的情況來吧
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

