/*
將字串按指定的分割分成多條記錄,返回table的記錄
調用方法:
select * from dbo.f_division_string('a,bc,dd,e,f,daf,eee',',')
*/
CREATE FUNCTION dbo.f_division_string
(
@str VARCHAR(4000) --所要分割字串
,@separate VARCHAR(100) --分割符
)
RETURNS @return_table TABLE --自訂的多表值變數,用於返回記錄集
(
idx INT --返回結果集的索引位置
,str_name VARCHAR(100) --分割後的字串值
)
AS
BEGIN
DECLARE
@count INT --迴圈次數
,@separate_len INT --分割符的長度
,@pos INT --迴圈所用的次數變數
,@separate_pos INT --每次分割的分割符所在當前的位置
SET @str=LTRIM(RTRIM(@str))
SET @separate_len=LEN(@separate)
IF RIGHT(@str,@separate_len)=@separate
BEGIN
SET @str=LEFT(@str,LEN(@str)-@separate_len)
END
SET @count=(LEN(@str)-LEN(REPLACE(@str,@separate,'')))/@separate_len
SET @pos=1
WHILE(@pos<=@count) --進行迴圈插入記錄
BEGIN
SET @separate_pos=CHARINDEX(@separate,@str)
INSERT INTO @return_table(idx,str_name)
VALUES(@pos,SUBSTRING(@str,1,@separate_pos-1))
SET @pos=@pos+1
SET @str=RIGHT(@str,LEN(@str)-@separate_pos-@separate_len+1) --將提取出來的字串在原有的字串上截取
END
INSERT INTO @return_table(idx,str_name) --插入最後一條記錄值
VALUES(@pos,@str)
RETURN
END
本文介绍了一个 SQL 自定义函数 f_division_string,该函数能够将输入的字串按照指定的分隔符进行分割,并返回一个包含分割后结果的记录表。此函数适用于需要批量处理字串分割任务的场景。
2683

被折叠的 条评论
为什么被折叠?



