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

如何在SQL中从文本数据里提取带#的完整订单号

提取带#的订单号解决方案

针对你遇到的问题,要精准提取#12340这类带#的数字订单号,需要定位到#的起始位置,再找到后续连续数字的结束位置,以下是不同SQL环境的实现方法:

SQL Server 兼容写法(适配旧版本)

SELECT 
    SUBSTRING(
        columnname,
        -- 定位到#的位置
        PATINDEX('%#%', columnname),
        -- 计算需要截取的长度:找到#后第一个非数字的位置,没有则取剩余全部长度
        CASE 
            WHEN PATINDEX('%[^0-9]%', SUBSTRING(columnname, PATINDEX('%#%', columnname)+1, LEN(columnname))) > 0
            THEN PATINDEX('%[^0-9]%', SUBSTRING(columnname, PATINDEX('%#%', columnname)+1, LEN(columnname)))
            ELSE LEN(columnname) - PATINDEX('%#%', columnname) + 1
        END
    ) AS order_number
FROM your_table

逻辑说明

  1. PATINDEX('%#%', columnname):找到订单号开头#的位置,作为截取的起始点。
  2. 内层通过SUBSTRING从#后第一个字符开始截取,再用PATINDEX('%[^0-9]%', ...)找到第一个非数字字符的位置,这个位置就是订单号数字部分的长度,加上#本身的1位,就是总截取长度。
  3. 如果字符串以订单号结尾(没有后续非数字字符),则直接取从#到字符串末尾的全部长度。

新版/其他SQL方言简化写法

如果你的SQL环境支持正则表达式函数,可以直接用正则匹配连续的#+数字:

  • MySQL:
SELECT REGEXP_SUBSTR(columnname, '#[0-9]+') AS order_number FROM your_table;
  • PostgreSQL:
SELECT substring(columnname FROM '#[0-9]+') AS order_number FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:53