drop function [zym_split]
go
create FUNCTION [dbo].[zym_split](@Long_str varchar(8000),@split_str varchar(100))
RETURNS @tmp TABLE(
ID int IDENTITY PRIMARY KEY,
short_str varchar(8000)
)
AS
BEGIN
DECLARE @long_str_Tmp varchar(8000),
@short_str varchar(8000),
@split_str_length int
SET @split_str_length = LEN(@split_str)
IF CHARINDEX(@split_str,@Long_str)=1
SET @long_str_Tmp=SUBSTRING(@Long_str,
@split_str_length+1,
LEN(@Long_str)-@split_str_length)
ELSE
begin
SET @long_str_Tmp=@Long_str
--print('没有分隔符!')
if charindex(',',@Long_str) = 0
insert into @tmp select @Long_str
end
IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
SET @long_str_Tmp=@long_str_Tmp+@split_str
ELSE
SET @long_str_Tmp=@long_str_Tmp
WHILE CHARINDEX(@split_str,@long_str_Tmp)>0
BEGIN
SET @short_str=SUBSTRING(@long_str_Tmp,1,
CHARINDEX(@split_str,@long_str_Tmp)-1)
DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int
SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)
SET @split_str_Position_END = LEN(@short_str)+@split_str_length
SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
@long_str_Tmp_LEN-@split_str_Position_END))
IF @short_str<>'' INSERT INTO @tmp SELECT @short_str
END
RETURN
END
GO
select charindex(',','11')
---测试
declare @Long_str varchar(8000)
declare @split_str varchar(100)
set @Long_str = '1,2,3'
set @split_str = ','
declare @tmp TABLE(
ID int IDENTITY PRIMARY KEY,
short_str varchar(8000)
)
DECLARE @long_str_Tmp varchar(8000),
@short_str varchar(8000),
@split_str_length int
SET @split_str_length = LEN(@split_str)
IF CHARINDEX(@split_str,@Long_str)=1
SET @long_str_Tmp=SUBSTRING(@Long_str,
@split_str_length+1,
LEN(@Long_str)-@split_str_length)
ELSE
begin
SET @long_str_Tmp=@Long_str
--print('没有分隔符!')
if charindex(',',@Long_str) = 0
insert into @tmp select @Long_str
end
IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
SET @long_str_Tmp=@long_str_Tmp+@split_str
ELSE
SET @long_str_Tmp=@long_str_Tmp
WHILE CHARINDEX(@split_str,@long_str_Tmp)>0
BEGIN
SET @short_str=SUBSTRING(@long_str_Tmp,1,
CHARINDEX(@split_str,@long_str_Tmp)-1)
DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int
SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)
SET @split_str_Position_END = LEN(@short_str)+@split_str_length
SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
@long_str_Tmp_LEN-@split_str_Position_END))
IF @short_str<>'' INSERT INTO @tmp SELECT @short_str
END
select * from @tmp
sql server 自定义split函数
原创
©著作权归作者所有:来自51CTO博客作者xocom的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何重写gorm日志(实现自定义慢sql打印)
gorm自定义日志格式,可实现慢sql自定义打印
sql SQL mysql -
SpringBoot自定义starter
SpringBoot自定义starter
spring maven ci