基于Snowflake SQL从字符串提取页数与金额字段的技术问询
从长字符串提取页数和金额的可行方案
你用的regexp_like只能判断字段里是否包含指定内容,没法直接提取数值,要实现需求得用REGEXP_SUBSTR这类正则提取函数,以下是针对你提供的示例字符串的具体实现:
提取页数
要匹配Annual Fee Up to之后、pages之前的数字(带千分位逗号),以Oracle为例:
-- 提取带逗号的页数字符串 REGEXP_SUBSTR(special_terms, 'Annual Fee Up to ([0-9,]+) pages', 1, 1, 'i', 1) AS page_count_str -- 转换成纯数值(去掉逗号) TO_NUMBER(REPLACE(REGEXP_SUBSTR(special_terms, 'Annual Fee Up to ([0-9,]+) pages', 1, 1, 'i', 1), ',', '')) AS page_count
提取金额
匹配pages @之后的美元金额,同样以Oracle为例:
-- 提取带$和逗号的金额字符串 REGEXP_SUBSTR(special_terms, 'pages @ (\$[0-9,.]+)', 1, 1, 'i', 1) AS amount_str -- 转换成纯数值(去掉$和逗号) TO_NUMBER(REPLACE(REPLACE(REGEXP_SUBSTR(special_terms, 'pages @ (\$[0-9,.]+)', 1, 1, 'i', 1), '$', ''), ',', '')) AS amount
适配不同数据库的说明
- 正则里的
'i'参数是忽略大小写,避免因大小写差异匹配失败 - 如果是MySQL环境,
REGEXP_SUBSTR不支持直接提取捕获组,得调整写法:
-- MySQL提取页数字符串 REPLACE(REPLACE(REGEXP_SUBSTR(special_terms, 'Annual Fee Up to [0-9,]+ pages', 1, 1, 'i'), 'Annual Fee Up to ', ''), ' pages', '') AS page_count_str -- MySQL提取金额字符串 REPLACE(REGEXP_SUBSTR(special_terms, 'pages @ \$[0-9,.]+', 1, 1, 'i'), 'pages @ ', '') AS amount_str
内容的提问来源于stack exchange,提问作者user24714803
相关产品推荐
相关产品推荐

