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

TSQL字符串拆分iTVF空值处理:需返回空结果集

解决SplitString函数空字符串输入无返回的问题

原函数在传入空字符串作为@List参数时,因LEN(@List)=0导致WHERE子句无匹配行,返回空表。若你需要传入空字符串时返回包含一个空值的结果集(而非完全无返回),可通过添加分支逻辑修改函数:

修改后的函数代码

ALTER FUNCTION [dbo].[SplitString]
    (@List NVARCHAR(MAX),
     @Delim VARCHAR(255))
RETURNS TABLE
AS
    RETURN 
        (
        -- 处理非空字符串的原有逻辑
        SELECT [Value], idx = RANK() OVER (ORDER BY n) 
         FROM 
             (SELECT 
                  n = Number, 
                  [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
        -- 新增:处理空字符串输入的情况
        UNION ALL
        SELECT '' AS [Value], 1 AS idx
        WHERE @List = ''
        );
GO

测试验证

  1. 常规输入测试:
SELECT value 
FROM dbo.SplitString('a|b|c', '|')  

返回结果:

valueidx
a1
b2
c3
  1. 空字符串输入测试:
SELECT value 
FROM dbo.SplitString('', '|')  

返回结果:

valueidx
1

逻辑说明

新增的UNION ALL分支仅在@List为空字符串时执行,返回一行包含空值和索引1的记录,完全兼容原函数对非空字符串的处理逻辑。若你实际需求是保持空结果集(无任何行),则原函数无需修改,但根据问题描述,推测你需要的是返回包含空值的结果集,因此采用上述方案。


内容的提问来源于stack exchange,提问作者Karthik Karnam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:25:17