You need to enable JavaScript to run this app. Teradata SQL 如何筛选两列中姓名顺序无关的匹配行
优惠活动
大模型
产品
解决方案
定价
更多

Teradata SQL 如何筛选两列中姓名顺序无关的匹配行

Teradata SQL 实现方案

方案1:适配原有SQL Server逻辑

原有逻辑是将col2按空格拆分为前后两个姓名段,只要col1同时包含这两个段即满足匹配(自动忽略顺序),适配Teradata语法只需要替换两个差异点:

  • 用INSTR函数替代CHARINDEX实现子串位置查找
  • 用||替代+实现字符串拼接

适配后的查询代码:

WHERE
  UPPER(col1) LIKE '%' || SUBSTRING(UPPER(col2), 1, INSTR(UPPER(col2), ' ') - 1) || '%'
AND
  UPPER(col1) LIKE '%' || SUBSTRING(UPPER(col2), INSTR(UPPER(col2), ' ') + 1) || '%'

注:Teradata的SUBSTRING如果省略长度参数,默认截取到字符串末尾,可简化写法


方案2:使用STRTOK函数简化写法

Teradata内置的STRTOK拆分函数更适合按分隔符取指定位置的子串,代码可读性更高:

WHERE
  UPPER(col1) LIKE '%' || UPPER(STRTOK(col2, ' ', 1)) || '%'
AND
  UPPER(col1) LIKE '%' || UPPER(STRTOK(col2, ' ', 2)) || '%'

STRTOK(col2, ' ', 1)表示按空格拆分col2取第1个分段,STRTOK(col2, ' ', 2)取第2个分段,和原有逻辑完全等效。


效果验证

针对你提供的测试数据:

col1col2匹配结果
Adam Nowak PHUNowak Adam匹配
AAR Kowal JanKowal Jan匹配
Tomasz GutJuk Anna不匹配

两个方案都只会返回前两行,完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:00:00