通过字符串修改连接(replace、concat、trim)

v440hwme  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(401)

我找不到电话 join 去工作。我有多余的空白和尾随内容,所以我想 replace , trim , like ,和 concat (对于通配符)会起作用,但不是。
以下是示例数据:

create table table1 (name varchar(200));
create table table2 (name varchar(200));
insert into table1 values
('A test: A Value'),
('A test: Another value');
insert into table2 values
('A Value: extra content'),
('Another Value: More content');

我希望表1的第1行与表2的第1行匹配,第2行也一样。这些应该匹配,因为 A test: 在表1中匹配表2的前导文本。
我的尝试是:

select *
from table1 as t1
join table2 as t2
on trim(replace(replace(t1.name, 'A test:', ''), '  ', ' ')) 
like concat(trim(replace(t2.name, '  ', ' ')), '%')

但没有匹配结果,
http://sqlfiddle.com/#!9/940742/4

li9yvcax

li9yvcax1#

它不起作用的原因是您试图在第一部分比第二部分短的条件下加入,例如:
在“值”上,例如“值:额外内容%”
因此,为了使其工作,您需要切换参数,使条件变为:
关于“值:额外内容”,如“值%”
我认为应该更改join子句,以便%与t1.name而不是t2.name连接。
这应该起作用:

select * 
from table1 as t1 
join table2 as t2
on trim(replace(t2.name, '  ', ' ')) 
like concat(trim(replace(replace(t1.name, 'A test:', ''), '  ', ' ')), '%') ;

看到了吗http://sqlfiddle.com/#!9/940742/23

相关问题