2016-06-24 3 views
0

Я присоединяюсь к столам Table_A и Table_B на колонках Col_A и Col_B. Ниже приведены некоторые значения тестовых образцов.Присоединение двух строк с использованием rlike

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 так, что первый случай не произойдет, то это не соответствует, когда нет цифр на ОРЗ? Или можно использовать regex? Взятие подстроки LHS не помогает, поскольку мы не можем определить длину заранее.

ответ

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 
+0

Спасибо! Я просто попробовал это, но разве это не будет работать, только если после США появится цифра? У меня также есть случаи, когда у нас нет никаких цифр, и мне нужно их сопоставить ... – visakh

+1

вот что сказал ваш вопрос. вы можете изменить часть else, чтобы обрабатывать те, у которых нет цифры после США –

Смежные вопросы