zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

SQL根据指定分隔符分解字符串实现步骤

SQL 实现 字符串 步骤 指定 根据 分解 分隔符
2023-06-13 09:14:41 时间
如果有一个字符串eg:"sun,star,moon,clouds",想要在MSSQL中根据给定的分隔符","把这个字符串分解成各个元素[sun][star][moon][clouds],如何实现呢?为此,创建一个Function,代码如下:
复制代码代码如下:

CREATEFUNCTION[dbo].[Split_StrByDelimiter](@StringVARCHAR(8000),@DelimiterCHAR(1))
RETURNS@temptableTABLE(itemsVARCHAR(8000))
AS
BEGIN
DECLARE@idxINT
DECLARE@sliceVARCHAR(8000)
SELECT@idx=1
IFlen(@String)<1OR@StringISNULLRETURN
while@idx!=0
BEGIN
SET@idx=charindex(@Delimiter,@String)
IF@idx!=0
SET@slice=LEFT(@String,@idx-1)
ELSE
SET@slice=@String
IF(len(@slice)>0)
INSERTINTO@temptable(Items)VALUES(@slice)
SET@String=RIGHT(@String,len(@String)-@idx)
IFlen(@String)=0break
END
RETURN
END

示例:如果输入
SELECT*FROMdbo.Split_StrByDelimiter("sun,star,moon,clouds",",")
结果返回
sun
star
moon
clouds
在上面的代码做变形,返回有多少个元素
复制代码代码如下:

CREATEFUNCTION[dbo].[GetCount_Split_StrByDelimiter](@StringVARCHAR(8000),@DelimiterCHAR(1))
RETURNSINT
AS
BEGIN
DECLARE@temptableTABLE(itemsVARCHAR(8000))
DECLARE@SplitCountINT
DECLARE@idxINT
DECLARE@sliceVARCHAR(8000)
SELECT@idx=1
IFlen(@String)<1OR@StringISNULLRETURN0
while@idx!=0
BEGIN
SET@idx=charindex(@Delimiter,@String)
IF@idx!=0
SET@slice=LEFT(@String,@idx-1)
ELSE
SET@slice=@String
IF(len(@slice)>0)
INSERTINTO@temptable(Items)VALUES(@slice)
SET@String=RIGHT(@String,len(@String)-@idx)
IFlen(@String)=0break
END
SET@SplitCount=(SELECTCOUNT(*)FROM@temptable)
RETURN@SplitCount
END

示例
SELECTdbo.GetCount_Split_StrByDelimiter("sun,star,moon,clouds",",")
结果返回
4