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

有没有可替代substr的函数适配所有数据?SQL字符串匹配问题咨询

SQL匹配异常修复方案

问题根因

你原有代码采用固定位置截取substr、硬编码拼接4个空格的逻辑,依赖trx_number中-前的空格数固定为4个,当出现空格数不足4个的场景时就会匹配失败。

解决方案

方案1:通用兼容方案(所有数据库支持,无需正则)

核心逻辑是移除两个字段中的所有空格后再做匹配,完全规避空格数量不统一的问题:

AND REPLACE(rct.trx_number, ' ', '') = 
    SUBSTR(REPLACE(ap.invoice_num, ' ', ''), 1, 8) 
    || SUBSTR(REPLACE(ap.invoice_num, ' ', ''), 10)
-- 可选校验invoice_num格式符合要求的条件,不需要可以删掉
AND SUBSTR(REPLACE(ap.invoice_num, ' ', ''), 9, 1) = 'B'

方案2:正则简化写法(支持正则的数据库可用,Oracle/MySQL8+/PostgreSQL/SQL Server2017+均支持)

用正则直接替换掉invoice_num中8位数字后的B即可匹配:

AND REGEXP_REPLACE(ap.invoice_num, '^(\d{8})B(.*)$', '\1\2') = rct.trx_number

效果验证

两种方案都可以覆盖你给出的两组测试场景:

  • 第一组数据:
    rct.trx_number='69362695 -901645'
    ap.invoice_num='69362695B -901645'
    匹配正常
  • 第二组数据:
    rct.trx_number='15428234 -0001006048'
    ap.invoice_num='15428234B -0001006048'
    匹配正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:04