SqlServe中分割字符串实现 类似split()功能
数据库SQL中实现split功能
如传入变量 '1,2,3,4'则可解析成1 2 3 4
下面是函数,
具体用例,还没有封装好,先贴着,等有时间再整
如传入变量 '1,2,3,4'则可解析成1 2 3 4
declare @string varchar(5000)
declare @splitchar char(1)
declare @l int -- 第一个分隔字符的位置
declare @s int -- 第二个分隔字符的位置
set @string ='1,2,3,4'
set @splitchar=','
set @l = 0
set @s = charindex(@splitchar, @string, @l) while @l <= len(@string)
begin
declare @id nvarchar(50) --被分割出来的值
-- 假如到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
if @s = 0 set @s = len(@string) + 1
set @id = substring(@string, @l, @s - @l) -- 取值
set @l = @s + 1
set @s = charindex(@splitchar, @string, @l)
select @id
if ltrim(rtrim(@id)) <>'' continue -- 假如是空字符串就跳过
end
declare @splitchar char(1)
declare @l int -- 第一个分隔字符的位置
declare @s int -- 第二个分隔字符的位置
set @string ='1,2,3,4'
set @splitchar=','
set @l = 0
set @s = charindex(@splitchar, @string, @l) while @l <= len(@string)
begin
declare @id nvarchar(50) --被分割出来的值
-- 假如到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
if @s = 0 set @s = len(@string) + 1
set @id = substring(@string, @l, @s - @l) -- 取值
set @l = @s + 1
set @s = charindex(@splitchar, @string, @l)
select @id
if ltrim(rtrim(@id)) <>'' continue -- 假如是空字符串就跳过
end
下面是函数,
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*
-------------------------------------------
名称:f_ProdLib_splitSTR
功能:拆分关键字
编写人:
时间:20060404
-------------------------------------------
*/
ALTER FUNCTION [dbo].[f_ProdLib_splitSTR](
@s varchar(8000), --要分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
set QUOTED_IDENTIFIER ON
go
/*
-------------------------------------------
名称:f_ProdLib_splitSTR
功能:拆分关键字
编写人:
时间:20060404
-------------------------------------------
*/
ALTER FUNCTION [dbo].[f_ProdLib_splitSTR](
@s varchar(8000), --要分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
具体用例,还没有封装好,先贴着,等有时间再整
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步