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

MS SQL Server 2016中提取notes列内固定长度AB开头字符串

解决SQL Server 2016中提取固定格式字符串的问题

在SQL Server 2016中,由于没有内置的正则提取函数,我们可以结合PATINDEX和SUBSTRING函数来实现从notes列中提取以AB开头、长度固定为10位的字符串(即AB后跟随8位数字)。

实现代码

SELECT 
    ServiceDate,
    notes,
    -- 提取符合条件的AB开头10位字符串,无匹配则返回NULL
    CASE 
        WHEN pos > 0 THEN SUBSTRING(notes, pos, 10)
        ELSE NULL
    END AS ExtractedABCode
FROM my_table
CROSS APPLY (
    -- 定位符合AB+8位数字模式的子串起始位置
    SELECT PATINDEX('%AB[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', notes) AS pos
) AS position_info;

代码说明

  1. PATINDEX函数:用于查找字符串中匹配指定模式的起始位置。这里的模式%AB[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%表示:
    • %:匹配任意长度的前置/后置字符,确保目标字符串在备注的任意位置都能被找到
    • AB:匹配固定前缀
    • [0-9]:匹配单个数字,连续写8次确保前缀后跟随8位数字,总长度刚好10位
  2. SUBSTRING函数:根据PATINDEX找到的起始位置,截取长度为10的子串,得到目标字符串
  3. CROSS APPLY:避免重复调用PATINDEX,提升查询效率
  4. CASE语句:处理无匹配结果的情况,返回NULL

针对示例数据的执行结果

ServiceDatenotesExtractedABCode
9/1/2022The order was called in AB13456736AB13456736
9/1/2022AB45876453 not setupNULL
9/2/2022Signature for AB764538334NULL
9/2/2022Contact for A0943847432NULL
9/3/2022Hold off on AB73645298NULL
9/5/2022** Confirmed AB88988476AB88988476
9/6/2022/AB9847654 completedNULL

注:示例中部分字符串因长度不符合10位(如AB45876453仅9位)、前缀非AB(如A0943847432),故未被提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:25:52