標籤:
SQL Server Split函數
--說明:
--支援分割符多位元組
--使用方法
--Select * FROM DBO.F_SQLSERVER_SPLIT(‘1203401230105045‘,‘0‘)
--select * from DBO.F_SQLSERVER_SPLIT(‘abc1234a12348991234‘,‘1234‘)
--Select * from DBO.F_SQLSERVER_SPLIT(‘ABC‘,‘,‘)
ALTER FUNCTION [dbo].[F_SQLSERVER_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)[email protected]_str_length)
ELSE
SET @[email protected]_str
IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
SET @[email protected][email protected]_str
ELSE
SET @[email protected]_str_Tmp
IF CHARINDEX(@split_str,@long_str_Tmp)=0
Insert INTO @tmp select @long_str_Tmp
ELSE
BEGIN
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)[email protected]_str_length
SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@[email protected]_str_Position_END))
IF @short_str<>‘‘ Insert INTO @tmp select @short_str
END
END
RETURN
END
調用方式:select short_str from F_SQLSERVER_SPLIT(@StoreId,‘,‘)
SQL Server Split函數 支援分割符多位元組