Sql server 函数将分隔符后的所有值拆分

Sql server 函数将分隔符后的所有值拆分,sql-server,Sql Server,我有一个select,返回100行。对于某些行的一列,我得到了正常的varchar(2)值。但是在一些行中,我得到了这样的字符串1}33}47}48}50}86}98}UC}AL}MH}88 我想在分隔符}之后拆分上述函数,并作为行返回 谁能帮我一下吗 提前感谢。首先,创建一个简单的字符串拆分函数: CREATE FUNCTION [dbo].[SplitString] ( @List NVARCHAR(MAX), @Delim VARCHAR(255)

我有一个select,返回100行。对于某些行的一列,我得到了正常的
varchar(2)
值。但是在一些行中,我得到了这样的字符串
1}33}47}48}50}86}98}UC}AL}MH}88

我想在分隔符
}
之后拆分上述函数,并作为行返回

谁能帮我一下吗


提前感谢。

首先,创建一个简单的字符串拆分函数:

CREATE FUNCTION [dbo].[SplitString]
    (
        @List NVARCHAR(MAX),
        @Delim VARCHAR(255)
    )
    RETURNS TABLE
    AS
        RETURN ( SELECT [Value] FROM 
          ( 
            SELECT 
              [Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],
              CHARINDEX(@Delim, @List + @Delim, [Number]) - [Number])))
            FROM (SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
              FROM sys.all_objects) AS x
              WHERE Number <= LEN(@List)
              AND SUBSTRING(@Delim + @List, [Number], LEN(@Delim)) = @Delim
          ) AS y
        );
结果:

ID      Value
----    -----
1       34
2       12
2       43
2       65
2       88
2       43
2       12
2       90
2       CD 

有关拆分函数的更多信息(如果拆分来自应用程序层的字符串,还有更好的替代方案):


您能提供示例数据和当前查询吗?您应该查看以下回复:@Brian公认的答案并不完全是一个性能良好的模型。基于集合的方法往往表现得更好。
ID      Value
----    -----
1       34
2       12
2       43
2       65
2       88
2       43
2       12
2       90
2       CD