CREATE FUNCTION [dbo].[StrSplit]
(
@str NVARCHAR(MAX),--字符串
@split VARCHAR(10),--截取符号
@num INT --返回第几条数据,不填则全部返回
)
RETURNS @Temp TABLE
(
List VARCHAR(100)
)
AS
BEGIN
--用法
----截取的数据全部返回
--select * from StrSplit('1234/123/345','/','')
----返回指定的数据
----例如返回第一个/后的数据
--select * from StrSplit('1234/123/345','/','2')
DECLARE @t TABLE
(
id INT IDENTITY(1,1),
List VARCHAR(100)
)
DECLARE @i INT=1
DECLARE @j INT=1
WHILE(@i>0)
BEGIN
SET @i=CHARINDEX(@split,@str,@j)
IF(@i>0)
BEGIN
INSERT @t
(
List
)
VALUES
(
SUBSTRING(@str,@j,@i-@j)
)
END
ELSE
BEGIN
INSERT @t
(
List
)
VALUES
(
SUBSTRING(@str,@j,LEN(@str)-@j+1)
)
END
SET @j = @i + 1
END
--是否指定第几次数据
--为空则全部返回,不为空则返回指定数据
IF ISNULL(@num,'')=''
BEGIN
--返回全部数据
INSERT INTO @Temp
SELECT List FROM @t
END
ELSE
BEGIN
--返回指定数据
INSERT INTO @Temp
SELECT List FROM @t WHERE id=@num
END
RETURN
END
例:根据'/'拆分'111/222/4333/122' 我要取出'222',或得到拆分后全部数据
DECLARE @Test NVARCHAR(1000)='111/222/4333/122'
SELECT * FROM StrSplit(@Test,'/','2')
--返回结果即为:222
--@Test 为要拆分的变量
--'/' 根据符号'/'进行拆分
--'2' 为要去的第几位数据,如果不写为空的时候,则返回所有参数
--例如
SELECT * FROM StrSplit(@Test,'/','')
--则返回数据为:
--111
--222
--4333
--122
这篇博客介绍了一个名为StrSplit的SQL用户定义函数,用于将字符串按指定分隔符拆分。函数接受三个参数:原始字符串、分隔符和可选的返回数据序号。如果未指定序号,则返回所有拆分后的数据;如果指定了序号,则返回对应位置的数据。示例中展示了如何使用该函数从'111/222/4333/122'中提取特定部分或获取所有拆分结果。
4329

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



