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

如何在SQL Server中用正则表达式提取指定模式字符串?

在SQL Server中使用正则提取字符串的解决方案

一、SQL Server原生是否有类似REGEXP_SUBSTR()的函数?

SQL Server没有原生的REGEXP_SUBSTR()函数,但可以通过组合PATINDEX()、SUBSTRING()、CHARINDEX()等系统函数实现等效的正则提取效果;如果有服务器权限,也可以通过CLR集成自定义正则函数。

二、提取目标温度值的具体实现

针对你提供的@message字符串,我们可以通过定位温度值前后的特征文本,结合函数组合精准提取每个日期对应的温度:

1. 定义测试变量

DECLARE @message NVARCHAR(MAX) = N'- Tomorrow: 75 degrees (bla xyz)  
- Day 1: 78 degrees etc 3300 fx  
- Day 2: 76 degrees ppp 99  
- Day 3: 80 degrees xxx2 ';

DECLARE @tomorrow_temperature NVARCHAR(10),
        @day_1_temperature NVARCHAR(10),
        @day_2_temperature NVARCHAR(10),
        @day_3_temperature NVARCHAR(10);

2. 逐个提取温度值

核心逻辑:用PATINDEX()定位温度值的起始位置,用CHARINDEX()找到温度值后的第一个空格确定截取长度,最后用SUBSTRING()提取目标内容。

提取Tomorrow的温度

SET @tomorrow_temperature = SUBSTRING(
    @message,
    PATINDEX('%Tomorrow: [0-9]%', @message) + LEN('Tomorrow: '),
    CHARINDEX(' ', @message, PATINDEX('%Tomorrow: [0-9]%', @message) + LEN('Tomorrow: ')) 
    - (PATINDEX('%Tomorrow: [0-9]%', @message) + LEN('Tomorrow: '))
);

提取Day 1的温度

SET @day_1_temperature = SUBSTRING(
    @message,
    PATINDEX('%Day 1: [0-9]%', @message) + LEN('Day 1: '),
    CHARINDEX(' ', @message, PATINDEX('%Day 1: [0-9]%', @message) + LEN('Day 1: ')) 
    - (PATINDEX('%Day 1: [0-9]%', @message) + LEN('Day 1: '))
);

提取Day 2的温度

SET @day_2_temperature = SUBSTRING(
    @message,
    PATINDEX('%Day 2: [0-9]%', @message) + LEN('Day 2: '),
    CHARINDEX(' ', @message, PATINDEX('%Day 2: [0-9]%', @message) + LEN('Day 2: ')) 
    - (PATINDEX('%Day 2: [0-9]%', @message) + LEN('Day 2: '))
);

提取Day 3的温度

SET @day_3_temperature = SUBSTRING(
    @message,
    PATINDEX('%Day 3: [0-9]%', @message) + LEN('Day 3: '),
    CHARINDEX(' ', @message, PATINDEX('%Day 3: [0-9]%', @message) + LEN('Day 3: ')) 
    - (PATINDEX('%Day 3: [0-9]%', @message) + LEN('Day 3: '))
);

3. 验证提取结果

SELECT 
    @tomorrow_temperature AS tomorrow_temperature,
    @day_1_temperature AS day_1_temperature,
    @day_2_temperature AS day_2_temperature,
    @day_3_temperature AS day_3_temperature;

执行后会得到预期结果:

tomorrow_temperatureday_1_temperatureday_2_temperatureday_3_temperature
75787680

三、更通用的正则提取方案(CLR自定义函数)

如果需要频繁使用正则提取功能,可以通过SQL Server的CLR集成创建自定义的REGEXP_SUBSTR函数:

  1. 编写C#代码实现正则匹配逻辑
  2. 将代码编译为DLL文件
  3. 在SQL Server中启用CLR并注册该函数
    注:此方法需要服务器管理员权限,且需注意安全配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:31:01