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

SSMS 2016字符串提取问题:匹配特定位置数字求助

解决SSMS 2016中特定格式字符串的提取需求

问题1:提取两个_之间的第一个纯数字

你的PATINDEX返回0是因为SQL Server的PATINDEX不支持正则表达式的+量词,它仅支持有限通配符(%、_、[]),无法识别[0-9]+这种语法。要匹配一个或多个数字,需用[0-9][0-9]*替代。

以下是可行的提取代码:

DECLARE @InputString VARCHAR(MAX) = '14Jan22_B_15May23_15_N_323_412_102';

-- 定位第一个被_包裹的纯数字段的起始位置(跳过开头的_)
DECLARE @StartPos INT = PATINDEX('%_[0-9][0-9]*_%', @InputString) + 1;
-- 定位该数字段末尾的_位置
DECLARE @EndPos INT = CHARINDEX('_', @InputString, @StartPos);
-- 提取目标数字
SELECT SUBSTRING(@InputString, @StartPos, @EndPos - @StartPos) AS First_Pure_Number;

执行后会返回示例中的15。

问题2:提取第一项数字之后_N_或_R_后的所有数字

基于问题1的结果,我们可以先定位_N_或_R_的位置(在第一个纯数字之后),再提取后续的所有数字段:

方法1:合并所有数字为单个字符串

DECLARE @InputString VARCHAR(MAX) = '14Jan22_B_15May23_15_N_323_412_102';

-- 先获取第一个纯数字的结束位置
DECLARE @FirstNumStart INT = PATINDEX('%_[0-9][0-9]*_%', @InputString) + 1;
DECLARE @FirstNumEnd INT = CHARINDEX('_', @InputString, @FirstNumStart);

-- 定位_N_或_R_的位置
DECLARE @MarkerPos INT = PATINDEX('%[_](N|R)[_]%', @InputString, @FirstNumEnd);
-- 跳转到标记后的第一个数字起始位置
SET @MarkerPos = CHARINDEX('_', @InputString, @MarkerPos + 1) + 1;

-- 提取并合并所有数字(去除_分隔符)
SELECT REPLACE(SUBSTRING(@InputString, @MarkerPos, LEN(@InputString) - @MarkerPos + 1), '_', '') AS Merged_Numbers;

执行后返回323412102。

方法2:拆分每个数字为单独行(需SQL Server 2016+)

利用STRING_SPLIT函数拆分分隔的数字:

DECLARE @InputString VARCHAR(MAX) = '14Jan22_B_15May23_15_N_323_412_102';

DECLARE @FirstNumStart INT = PATINDEX('%_[0-9][0-9]*_%', @InputString) + 1;
DECLARE @FirstNumEnd INT = CHARINDEX('_', @InputString, @FirstNumStart);
DECLARE @MarkerPos INT = PATINDEX('%[_](N|R)[_]%', @InputString, @FirstNumEnd);
SET @MarkerPos = CHARINDEX('_', @InputString, @MarkerPos + 1) + 1;

-- 拆分并返回每个数字
SELECT value AS Individual_Numbers
FROM STRING_SPLIT(SUBSTRING(@InputString, @MarkerPos, LEN(@InputString) - @MarkerPos + 1), '_');

执行后会返回三行结果:323、412、102。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:53:31