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

如何基于MarketID字段按指定规则提取目标值的技术问询

从MarketID字段提取目标值的SQL实现方案

首先咱们再把提取规则理清楚,确保没偏差:

  • 先看MarketID的第二位字符是不是.,而且紧跟后面的三位都是数字,如果是,就把这三位数字取出来;
  • 如果第一条不满足,就看第四位字符是不是.,紧接后面的三位也是数字的话,就取这三位;
  • 要是两条都不满足,直接返回0。
    比如例子里的'3.001.1.16',第二位是.,后面跟着001三位数字,所以提取结果就是001。

接下来给你准备了几种常用数据库的实现代码,直接替换表名就能用:

MySQL 版本

SELECT 
    CASE
        -- 检查第二位是.,且后面三位为数字
        WHEN SUBSTRING(MarketID, 2, 1) = '.' AND SUBSTRING(MarketID, 3, 3) REGEXP '^[0-9]{3}$'
            THEN SUBSTRING(MarketID, 3, 3)
        -- 检查第四位是.,且后面三位为数字
        WHEN SUBSTRING(MarketID, 4, 1) = '.' AND SUBSTRING(MarketID, 5, 3) REGEXP '^[0-9]{3}$'
            THEN SUBSTRING(MarketID, 5, 3)
        -- 都不满足返回0
        ELSE '0'
    END AS ExtractedMarketValue
FROM your_table_name;

SQL Server 版本

SELECT 
    CASE
        WHEN SUBSTRING(MarketID, 2, 1) = '.' AND ISNUMERIC(SUBSTRING(MarketID, 3, 3)) = 1 AND LEN(SUBSTRING(MarketID, 3, 3)) = 3
            THEN SUBSTRING(MarketID, 3, 3)
        WHEN SUBSTRING(MarketID, 4, 1) = '.' AND ISNUMERIC(SUBSTRING(MarketID, 5, 3)) = 1 AND LEN(SUBSTRING(MarketID, 5, 3)) = 3
            THEN SUBSTRING(MarketID, 5, 3)
        ELSE '0'
    END AS ExtractedMarketValue
FROM your_table_name;

小提示

  • 记得把代码里的your_table_name替换成你实际的数据表名称;
  • 如果需要提取的结果是数值类型,把'0'改成0就行,按需调整;
  • SQL Server里用ISNUMERIC判断数字,同时加长度判断确保是三位,避免出现不足三位的无效情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:06