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

如何结合SUBSTR()与CHARINDEX()提取文本特定行?T-SQL账号提取需求

T-SQL提取文本块中账号的简洁方法

核心步骤

  • 先将文本块按换行拆分,筛选出包含Account:的目标行
  • 从目标行中提取末尾的整数账号

具体实现代码

1. 变量场景测试

DECLARE @TextBlock NVARCHAR(MAX) = 'Amount: $10.00
Date: 12/5/2022
Account: Mr. John Doe 83850';

-- 直接提取账号整数
SELECT 
    CAST(
        RIGHT(
            value, 
            PATINDEX('%[^0-9]%', REVERSE(value)) - 1
        ) AS INT
    ) AS AccountNumber
FROM STRING_SPLIT(@TextBlock, CHAR(10))
WHERE value LIKE '%Account:%';

2. 封装成可复用函数

CREATE FUNCTION dbo.ExtractAccountNumber(@TextBlock NVARCHAR(MAX))
RETURNS INT
AS
BEGIN
    DECLARE @AccountLine NVARCHAR(MAX);
    -- 筛选出账号所在行
    SELECT @AccountLine = value
    FROM STRING_SPLIT(@TextBlock, CHAR(10))
    WHERE value LIKE '%Account:%';

    -- 提取末尾的整数部分
    RETURN CAST(
        RIGHT(
            @AccountLine, 
            PATINDEX('%[^0-9]%', REVERSE(@AccountLine)) - 1
        ) AS INT
    );
END;

-- 函数使用示例
SELECT dbo.ExtractAccountNumber(Content) AS AccountNumber
FROM YourTableName;

代码说明

  • STRING_SPLIT(@TextBlock, CHAR(10)):按换行符拆分文本为单独行(若文本用CHAR(13)+CHAR(10)作为换行,替换成该组合即可)
  • WHERE value LIKE '%Account:%':精准定位账号所在行
  • REVERSE(value) + PATINDEX('%[^0-9]%', ...):从行尾往前定位第一个非数字字符,确定账号长度
  • RIGHT(...)截取数字段后转成整数类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:40:39