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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:02:42