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

如何在Snowflake SQL中从商品描述字符串提取特定规格数字

问题

需要从格式各异的商品描述中提取正确的包装规格数字(统一为GM单位),原SQL语句REGEXP_REPLACE(SPLIT_PART(UPPER(PRODUTC_DESCRIPTION),'GM',1),'[^[:digit:]]')会提取所有数字导致结果错误,例如将"PRODUCT A 3 CHEESE SLICE 170 GM"中的3和170合并为3170,且无法处理KG单位的转换。

解决方案

通过正则精准匹配紧跟GM/KG单位的数值,再根据单位转换为GM,Snowflake SQL实现如下:

SELECT
    PRODUCT_DESCRIPTION,
    CASE
        -- 匹配KG单位,提取数值后乘以1000转GM
        WHEN REGEXP_LIKE(UPPER(PRODUCT_DESCRIPTION), '[0-9.]+KG')
            THEN TO_NUMBER(REGEXP_SUBSTR(UPPER(PRODUCT_DESCRIPTION), '[0-9.]+(?=KG)')) * 1000
        -- 匹配GM单位,直接提取数值
        WHEN REGEXP_LIKE(UPPER(PRODUCT_DESCRIPTION), '[0-9.]+GM')
            THEN TO_NUMBER(REGEXP_SUBSTR(UPPER(PRODUCT_DESCRIPTION), '[0-9.]+(?=GM)'))
        ELSE NULL -- 无匹配时返回NULL,可根据需求调整
    END AS EXPECTED_PACK_SIZE
FROM YOUR_TABLE;
逻辑说明
  • 使用正向预查正则[0-9.]+(?=GM)和[0-9.]+(?=KG),精准提取GM/KG前的数值(包括小数),不会匹配前面无关的数字(如"12X156GM"中的12会被忽略,只提取156)。
  • 对KG单位的数值自动乘以1000,统一转换为GM单位的规格数字。
  • 支持带小数点的数值处理(如1.3KG转换为1300)。
测试结果

针对示例数据执行后,结果完全符合预期:

PRODUCT_DESCRIPTIONEXPECTED_PACK_SIZE
PRODUCT A 3 CHEESE SLICE 170 GM170
PRODUCT B SUGAR 1.3KG (CL)1300
PRODUCT C CHEESE SLICES 12X156GM156
PRODUCT KETCHUP BOTTLE 200GM (CL)200
PRODUCT KETCHUP 1.3KG (CL)1300
KITCHEN 88 KALE & CHIA BASMATI RICE 150GM150

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:25:18