我正在列Table_A
和Table_B
上加入表格Col_A
和Col_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的子串没有帮助,因为我们事先无法确定长度。
答案 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