结合字符串修改(替换,合并,修剪)

时间:2018-11-12 23:01:58

标签: mysql join wildcard sql-like trim

我无法工作join。我有多余的空格和尾随内容,所以我认为replacetrimlikeconcat(通配符)可以使用,但无效。

以下是示例数据:

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行的相同。这应该匹配,因为表1中A test:之后的内容与表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

1 个答案:

答案 0 :(得分:1)

之所以不起作用,是因为您试图在第一部分短于第二部分的条件下加入,例如:

关于“价值”:“价值:额外内容%”

因此,为了使其正常工作,您需要切换参数,以便条件变为:

关于“ A Value:额外的内容”,例如“ A Value%”

我相信您应该更改join子句,以使%与t1.name而不是t2.name串联。

这应该有效:

consumer.seek(partition, offset)

请参见http://sqlfiddle.com/#!9/940742/23