代码之家  ›  专栏  ›  技术社区  ›  user3783243

通过字符串修改连接(替换、连接、修剪)

  •  -1
  • user3783243  · 技术社区  · 6 年前

    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');
    

    我希望table1的第1行与table2的第1行匹配,第2行也一样。这些应该匹配,因为 A test:

    我的尝试是:

    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 回复  |  直到 5 年前
        1
  •  1
  •   jpw    6 年前

    它不起作用的原因是,您试图在第一部分比第二部分短的条件下加入,例如:

    在像“值:额外内容%”这样的“值”上

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

    我认为您应该更改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