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

Teradata中使用正则提取并拆分不同字段内的费用金额需求

费用拆分提取需求

原始Teradata表

IDCOLUMN_1COLUMN_2COLUMN_3
1FEE $8NO FEEUNPAID FEE $18.
2UNPAID FEE$12ACCOUNT_FEE $12.
3OD FEE 2 * $4 $8FEE $9ACCOUNT_FEE $8.

目标结果表

IDFEEUNPAID_FEEACCOUNT_FEEOD_FEE
1$8$1800
2$0$12120
3$9.$0.$88

核心需求

  • 将分散在COLUMN_1/COLUMN_2/COLUMN_3中的各类费用拆分到对应字段
  • 针对OD FEE场景,需提取最终金额,忽略中间计算数值(如示例中OD FEE 2 * $4 $8只取$8对应的数值)

Teradata实现SQL

WITH combined_fees AS (
    SELECT 
        ID,
        COLUMN_1 || ' ' || COLUMN_2 || ' ' || COLUMN_3 AS all_fee_text
    FROM your_table_name
)
SELECT 
    ID,
    COALESCE(REGEXP_SUBSTR(all_fee_text, 'FEE \\$\\d+\\.*'), '$0') AS FEE,
    COALESCE(REGEXP_SUBSTR(all_fee_text, 'UNPAID FEE \\$\\d+\\.*'), '$0.') AS UNPAID_FEE,
    COALESCE(REGEXP_REPLACE(REGEXP_SUBSTR(all_fee_text, 'ACCOUNT_FEE \\$\\d+\\.*'), 'ACCOUNT_FEE \\$', ''), '0') AS ACCOUNT_FEE,
    COALESCE(REGEXP_REPLACE(REGEXP_SUBSTR(all_fee_text, 'OD FEE .*?(\\$\\d+)', 1, 1, 'i', 1), '\\$', ''), '0') AS OD_FEE
FROM combined_fees;

代码说明

  1. 合并字段:将三个列的内容合并为一个字符串,简化跨列匹配逻辑
  2. 正则匹配规则:
    • FEE:匹配FEE $后跟数字及可选小数点,无匹配则返回$0
    • UNPAID_FEE:匹配UNPAID FEE $后跟数字及可选小数点,无匹配则返回$0.
    • ACCOUNT_FEE:匹配后移除前缀和$符号,无匹配则返回0
    • OD_FEE:通过捕获组提取OD FEE后的最后一个金额值,移除$符号,无匹配则返回0
  3. 空值处理:用COALESCE确保未匹配到费用时返回符合要求的默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:53:14