You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

兼容级别110下无法使用string_split函数的替代方案及自定义实现方法

SQL Server 兼容级别110下STRING_SPLIT函数替代方案

核心替代方案

  • 递归CTE实现:无需创建额外数据库对象,适合单次临时拆分场景,拆分长字符串时性能一般
  • XML路径转换实现:调用内置XML处理能力完成拆分,性能优于递归CTE,适合拆分不包含XML特殊字符的短字符串
  • 自定义表值函数:封装后可全局复用,支持自定义分隔符,兼容各类特殊字符,适合高频拆分场景

自定义字符串拆分函数实现

以下为兼容SQL Server 2012(兼容级别110)的多语句表值拆分函数,支持传入待拆分字符串、自定义分隔符两个参数,返回拆分后的行号和拆分值:

CREATE FUNCTION dbo.SplitString
(
    @InputString NVARCHAR(MAX),  -- 待拆分的字符串
    @Delimiter NVARCHAR(10)      -- 自定义分隔符,支持多字符分隔
)
RETURNS @Result TABLE (
    RowId INT IDENTITY(1,1),     -- 拆分后的顺序号
    SplitValue NVARCHAR(MAX)     -- 拆分后的值
)
AS
BEGIN
    DECLARE @StartIndex INT = 1, @SplitLen INT = LEN(@Delimiter)
    -- 补充分隔符避免遗漏最后一段
    IF RIGHT(@InputString, @SplitLen) <> @Delimiter
        SET @InputString += @Delimiter
    
    WHILE CHARINDEX(@Delimiter, @InputString, @StartIndex) > 0
    BEGIN
        DECLARE @EndIndex INT = CHARINDEX(@Delimiter, @InputString, @StartIndex)
        INSERT INTO @Result (SplitValue)
        VALUES(SUBSTRING(@InputString, @StartIndex, @EndIndex - @StartIndex))
        SET @StartIndex = @EndIndex + @SplitLen
    END
    RETURN
END

调用示例

拆分逗号分隔的字符串:

SELECT * FROM dbo.SplitString('苹果,香蕉,橙子,葡萄', ',')

拆分多字符分隔的字符串:

SELECT * FROM dbo.SplitString('北京||上海||广州||深圳', '||')

提示:如果仅需要拆分单字符分隔的字符串,可将分隔符参数固定为NVARCHAR(1),能进一步提升函数执行效率。

内容的提问来源于stack exchange,提问作者Chinmoy Bhowmik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:07