如何结合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
相关产品推荐
相关产品推荐

