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

SQL Server中如何提取字符串内#符号之间的所有内容?

提取SQL语句中#包裹内容的解决方案

当然可以实现,由于目标内容长度不固定,SUBSTRING确实不适用,以下提供两种针对SQL Server的可行方案(从你的语句语法判断使用的是SQL Server):

方法一:递归CTE(兼容所有SQL Server版本)

先创建示例表模拟你的数据:

CREATE TABLE YourTable (Commands NVARCHAR(MAX));
INSERT INTO YourTable VALUES
('SELECT - #TRAPAY#'),
('SELECT - #OSTLIA#'),
('SELECT ISNULL(CONVERT(VARCHAR(50), #OPCASH# + #ACCREC# + #INVENT# + #OCASS# + #TRAPAY_N# +  #OSTLIA_N#), ''-'')'),
('SELECT #GTFA#'),
('SELECT #ACCDEP#');

使用递归CTE逐对提取#之间的内容:

WITH RecursiveCTE AS (
    -- 初始步骤:定位第一对#并提取内容
    SELECT 
        Commands,
        CHARINDEX('#', Commands) AS StartPos,
        CHARINDEX('#', Commands, CHARINDEX('#', Commands) + 1) AS EndPos,
        SUBSTRING(Commands, CHARINDEX('#', Commands) + 1, CHARINDEX('#', Commands, CHARINDEX('#', Commands) + 1) - CHARINDEX('#', Commands) - 1) AS ExtractedValue
    FROM YourTable
    WHERE CHARINDEX('#', Commands) > 0

    UNION ALL

    -- 递归步骤:继续提取后续的#包裹内容
    SELECT 
        r.Commands,
        CHARINDEX('#', r.Commands, r.EndPos + 1) AS StartPos,
        CHARINDEX('#', r.Commands, CHARINDEX('#', r.Commands, r.EndPos + 1) + 1) AS EndPos,
        SUBSTRING(r.Commands, CHARINDEX('#', r.Commands, r.EndPos + 1) + 1, CHARINDEX('#', r.Commands, CHARINDEX('#', r.Commands, r.EndPos + 1) + 1) - CHARINDEX('#', r.Commands, r.EndPos + 1) - 1) AS ExtractedValue
    FROM RecursiveCTE r
    WHERE CHARINDEX('#', r.Commands, r.EndPos + 1) > 0
)
SELECT Commands, ExtractedValue
FROM RecursiveCTE
ORDER BY Commands;

方法二:STRING_SPLIT(仅适用于SQL Server 2016及以上版本)

通过替换分隔符拆分字符串,再过滤掉非目标内容:

SELECT 
    y.Commands,
    TRIM(s.value) AS ExtractedValue
FROM YourTable y
CROSS APPLY STRING_SPLIT(REPLACE(y.Commands, '#', '|'), '|') s
WHERE TRIM(s.value) <> '' 
  AND s.value NOT IN ('SELECT', '-', 'ISNULL', 'CONVERT', 'VARCHAR(50)', '')
  AND CHARINDEX('+', s.value) = 0;

注意:此方法需要根据实际语句调整过滤条件,避免误删包含特殊字符的目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:49:53