如何基于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
相关产品推荐
相关产品推荐

