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

SQL中InvoiceTitle字段子串提取优化及分期逻辑适配问询

针对clean.InvoiceFact表InvoiceTitle字段的SQL查询优化方案

核心问题修正方向

  • 精准提取纯用户名,排除日期等前置干扰内容
  • 清洗商户名,移除括号及内部冗余信息
  • 重构分期逻辑,支持任意期数的识别

优化后SQL示例(以SQL Server为例)

SELECT
    -- 提取纯用户名:根据实际格式调整前后匹配标识,示例为「用户:」后、「商户」前的内容
    SUBSTRING(
        InvoiceTitle,
        PATINDEX('%用户:%', InvoiceTitle) + 3,
        PATINDEX('%商户%', InvoiceTitle) - PATINDEX('%用户:%', InvoiceTitle) - 3
    ) AS PureUserName,
    -- 提取无冗余商户名:移除括号及内部内容,兼容无括号的商户名
    CASE
        WHEN PATINDEX('%(%', InvoiceTitle) > 0 THEN LEFT(InvoiceTitle, PATINDEX('%(%', InvoiceTitle) - 1)
        ELSE InvoiceTitle
    END AS CleanMerchantName,
    -- 识别任意分期数:支持「第X期」「分期X」等格式,提取数字部分
    CASE
        WHEN PATINDEX('%第[0-9]%期%', InvoiceTitle) > 0 THEN
            SUBSTRING(
                InvoiceTitle,
                PATINDEX('%第[0-9]%期%', InvoiceTitle) + 1,
                PATINDEX('%期%', InvoiceTitle) - PATINDEX('%第[0-9]%期%', InvoiceTitle) - 1
            )
        WHEN PATINDEX('%分期[0-9]%', InvoiceTitle) > 0 THEN
            SUBSTRING(
                InvoiceTitle,
                PATINDEX('%分期[0-9]%', InvoiceTitle) + 2,
                PATINDEX('%[^0-9]%', SUBSTRING(InvoiceTitle, PATINDEX('%分期[0-9]%', InvoiceTitle) + 2, LEN(InvoiceTitle))) - 1
            )
        ELSE '非分期'
    END AS InstallmentNumber,
    -- 提取服务类型:示例为文本开头到第一个日期前的内容
    LEFT(
        InvoiceTitle,
        PATINDEX('%[0-9]{4}-[0-9]{2}-[0-9]{2}%', InvoiceTitle) - 1
    ) AS ServiceType
FROM clean.InvoiceFact

规则适配说明

  • 用户名提取:若实际格式中用户名的前后标识不同(如「姓名:XXX」「用户_XXX」),直接调整PATINDEX中的匹配字符串即可
  • 商户名清洗:如果存在其他冗余格式(如后缀冗余),可扩展CASE分支处理
  • 分期识别:针对「第N次还款」等特殊分期表述,可新增CASE分支匹配对应格式
  • 特殊格式兼容:其他数据库可替换为对应正则函数(如MySQL的REGEXP_SUBSTR、PostgreSQL的REGEXP_MATCH)优化匹配逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:12:17