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

SQL Server如何用正则/PatIndex删除单引号间少于5字符的内容

问题原因

你目前使用的fn_StripCharacters函数本身逻辑是单个字符匹配删除,函数内部会把你传入的匹配规则包在[]字符集语法里,所以你传入的'/^''PC''$/'会被解析为「匹配删除所有/、^、'、P、C、$单个字符」,完全达不到匹配整个'PC'子串的需求,更没法判断单引号包裹内容的长度。

推荐解决方案(SQL Server 2016及以上版本)

直接用字符串拆分+过滤+合并的逻辑实现,不需要依赖原有自定义函数,逻辑更清晰稳定:

SELECT STRING_AGG(QUOTENAME(value, ''''), ',') 
FROM STRING_SPLIT(REPLACE(你的字段名, '''', ''), ',')
WHERE LEN(value) >=5

逻辑说明:

  • 先把原字符串的单引号全部去除,再按逗号拆分出每个独立的项
  • 过滤出字符长度≥5的项
  • 给符合要求的项重新包裹单引号,再用逗号拼接为最终字符串
低版本SQL Server适配方案

如果你的SQL Server版本低于2016,没有原生的STRING_SPLIT和STRING_AGG函数,可以先自定义拆分字符串的表值函数:

CREATE FUNCTION dbo.SplitString
(
    @String NVARCHAR(MAX),
    @Delimiter CHAR(1)
)
RETURNS @Result TABLE (Value NVARCHAR(MAX))
AS
BEGIN
    DECLARE @Pos INT
    WHILE CHARINDEX(@Delimiter, @String) > 0
    BEGIN
        SET @Pos = CHARINDEX(@Delimiter, @String)
        INSERT INTO @Result (Value) VALUES (LEFT(@String, @Pos - 1))
        SET @String = RIGHT(@String, LEN(@String) - @Pos)
    END
    INSERT INTO @Result (Value) VALUES (@String)
    RETURN
END

再执行查询实现需求:

SELECT STUFF((
    SELECT ',' + QUOTENAME(REPLACE(Value, '''', ''), '''')
    FROM dbo.SplitString(你的字段名, ',')
    WHERE LEN(REPLACE(Value, '''', '')) >=5
    FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:21:03