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

在SQL Server(MSSQL)中从字符串提取UUID的方法

在MSSQL中匹配并提取字符串中的UUID

MSSQL的PATINDEX采用通配符匹配规则,而非标准正则表达式,不支持PostgreSQL里的非捕获组(?:...)语法,也不支持{n}这类数量限定符,这就是你之前的语句返回0的原因。

1. 使用PATINDEX定位UUID位置

把数量限定符展开为重复的字符匹配模式,就能正确定位UUID的起始位置:

SELECT PATINDEX('%[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]%', 
'root://Item/Item//4296d6c9-3cc4-3d21-af4f-0cd4cdfbf31b/15/11');

该语句会返回UUID在字符串中的起始位置(示例中返回19)。

2. 直接提取UUID值

如果需要直接提取UUID,MSSQL 2017及以上版本支持REGEXP_REPLACE,可以用标准正则语法实现:

SELECT REGEXP_REPLACE('root://Item/Item//4296d6c9-3cc4-3d21-af4f-0cd4cdfbf31b/15/11', 
'^.*?([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}).*$', 
'$1') AS ExtractedUUID;

该语句会直接返回4296d6c9-3cc4-3d21-af4f-0cd4cdfbf31b。

如果使用低于2017的版本,结合PATINDEX和SUBSTRING也能完成提取:

DECLARE @str NVARCHAR(255) = 'root://Item/Item//4296d6c9-3cc4-3d21-af4f-0cd4cdfbf31b/15/11';
DECLARE @start INT = PATINDEX('%[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]%', @str);
SELECT SUBSTRING(@str, @start, 36) AS ExtractedUUID;

内容的提问来源于stack exchange,提问作者Valeriy K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:34:52