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

解读已离职人员编写的SQL表值函数[dbo].[udfSplitString]的功能

自定义表值函数[dbo].[udfSplitString]功能分析

函数定义

ALTER FUNCTION [dbo].[udfSplitString]
(    
    @Input NVARCHAR(MAX),
    @Character CHAR(1)
)
RETURNS @Output TABLE (
    Item NVARCHAR(1000)
)
AS
BEGIN
    DECLARE @StartIndex INT, @EndIndex INT
 
    SET @StartIndex = 1
    IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
    BEGIN
        SET @Input = @Input + @Character
    END
 
    WHILE CHARINDEX(@Character, @Input) > 0
    BEGIN
        SET @EndIndex = CHARINDEX(@Character, @Input)
         
        INSERT INTO @Output(Item)
        SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
         
        SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
    END
 
    RETURN
END

基础参数说明

  • 输入参数@Input NVARCHAR(MAX):待拆分的原始字符串,支持最大长度的Unicode文本
  • 输入参数@Character CHAR(1):指定的拆分分隔符,仅支持传入单个字符
  • 返回值:结构为(Item NVARCHAR(1000))的表,每一行存储一个拆分得到的子串,子串最大长度为1000字符

核心运行逻辑

  1. 边界兼容处理:先判断原始字符串末尾是否已经带有指定分隔符,如果没有就自动在末尾补加分隔符,避免最后一段子串被遗漏拆分
  2. 循环拆分逻辑:通过循环查找分隔符在剩余待处理字符串中的位置,每匹配到一个分隔符就截取分隔符之前的内容插入结果表,再将已经处理完成的部分(包含当前匹配到的分隔符)从待处理字符串中移除
  3. 循环终止条件:剩余待处理字符串中不存在指定分隔符时,停止拆分返回结果表

实际作用

这是一个通用的字符串拆分工具函数,作用是将用单个字符分隔的长字符串,拆解为多行的子串集合,常见使用场景包括:

  • 处理前端传入的多值拼接参数,拆分后用于IN条件查询
  • 拆分业务表中存储的拼接格式字段,转化为结构化数据做关联分析

调用示例

执行以下调用:

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

将返回4行结果,Item字段的值分别为:北京、上海、广州、深圳

注意事项

  • 单条子串长度超过1000字符时会被截断
  • 仅支持单个字符作为分隔符,不支持多字符分隔符的拆分需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:57:03