使用rlike连接两个字符串

时间:2016-06-24 13:20:58

标签: mysql sql regex

我正在列Table_ATable_B上加入表格Col_ACol_B。以下是一些测试样本值。

Table_A, Col_A
USA1FullCover
USAMainland
USA2Islands

Table_B, Col_B
USA
USA1
USA2

加入时,我需要匹配值“USA”后跟一个数字。例如,连接结果应该如下所示。

Col_A          Col_B
USA1FullCover  USA1
USAMainland    USA
USA2Island     USA2

我正试图在MySQL中实现这一目标。我尝试了rlike功能。但问题是rlike,我无法完全匹配它们。

select
case when 'USA1FullCover' rlike 'USA' then 1 else 0 end;
#matches, but shouldn't

select
case when 'USA1FullCover' rlike 'USA1' then 1 else 0 end;
#matches, which is what I need/expect

select
case when 'USA1FullCover' rlike 'USA2' then 1 else 0 end;
#doesn't match, which is what I need/expect

我的问题是如何修复rlike以便第一种情况不会发生,即当RHS上没有数字时它不匹配?或者是否可以使用regex?采用LHS的子串没有帮助,因为我们事先无法确定长度。

1 个答案:

答案 0 :(得分:1)

使用

col_A regexp '^USA[0-9]{1}.+$'

匹配美国,然后是一个数字,后跟任何其他字符。

仅在存在此类模式时加入

select a.*,b.*
from tableA a
join tableB b on 
case when a.col_A regexp '^USA[0-9]{1}.+$' then substring(a.col_A,1,4) else '' end
= b.col_B