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

SQL模式匹配:匹配column a时去除column b末尾3个字符的实现方法

你当前查询无结果的核心原因有两个:

  1. 关联条件里直接写column_a like '%column_b%'会把column_b识别为固定字符串而非字段值,不会读取b列的内容做匹配
  2. 没有对b列做末尾3位的截断处理,原始b列的内容本身就不存在于a列中

解决方法

核心逻辑是截取b列除末尾3位外的前缀,再和a列做匹配,标准SQL写法如下:

SELECT
  t1.column_a,
  t2.column_b
  -- 补充你需要的其余字段
FROM t1
INNER JOIN t2
  -- 截取b列去掉末尾3位的前缀,和a列做模糊匹配
  ON t1.column_a LIKE CONCAT('%', LEFT(t2.column_b, LENGTH(t2.column_b) - 3), '%')

如果你的b列格式固定为8位数字+3位固定后缀,可以直接取前8位简化写法,性能也更好:

SELECT
  t1.column_a,
  t2.column_b
FROM t1
INNER JOIN t2
  ON t1.column_a LIKE CONCAT('%', LEFT(t2.column_b, 8), '%')

不同数据库的字符串函数略有差异,可以按需调整:

  • MySQL:将LENGTH替换为CHAR_LENGTH即可,也可以用SUBSTRING函数实现截取
  • Oracle:使用SUBSTR(t2.column_b, 1, LENGTH(t2.column_b) - 3)实现截取
  • SQL Server:将LENGTH替换为LEN即可

如果需要更高的匹配精准度,也可以提取a列中[]包裹的8位数字和b列前缀做等值匹配,避免模糊匹配带来的误匹配问题,以MySQL为例:

SELECT
  t1.column_a,
  t2.column_b
FROM t1
INNER JOIN t2
  -- 提取a列[]内的8位数字
  ON SUBSTRING_INDEX(SUBSTRING_INDEX(t1.column_a, '[', -1), ']', 1) = LEFT(t2.column_b, 8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:04