部分字符串匹配mysql

时间:2017-02-14 10:41:12

标签: mysql pattern-matching string-matching

我正在处理客户的银行交易数据,我希望排除包含部分或全部客户名称的交易。 我的数据如下:

Table A:
Cust_ID       |TxnDescription                       |
-----------   |-------------------------------------|
C123-------   |#######LIANDRI CORPORATION###########|
C123-------   |#########LIANDRI#####################|
C123-------   |############JEFF L###################|
C123-------   |#########K.S. LI ANDRI###############|
C123-------   |############XAN KRIEGOR##############|
C123-------   |####AXON RESEARCH CORPORATION########|
C123-------   |############FENTECH INCORPORATED#####|
C123-------   |########PHAYDER CORPORATION##########|
C123-------   |############IZANAGI CORPORATION######|

Table B:
Cust_ID       |PromoterName                         |
--------------|-------------------------------------|
C123          |LIANDRI CORPORATION                  |
C123          |JEFF LIANDRI                         |
C123          |K S LIANDRI                          |
C123          |XAN KRIEGOR                          |
C324          |IZANAGI CORPORATION                  |

我想要的输出是:

TABLE: E
Cust_ID       |TxnDescription                       |Fl_Exclude  |
-----------   |-------------------------------------|------------|
C123-------   |#######LIANDRI CORPORATION###########|YES         |
C123-------   |#########LIANDRI#####################|YES         |
C123-------   |############JEFF LI ANDRI############|YES         |
C123-------   |#########K.S. LI ANDRI###############|YES         |
C123-------   |############XAN KRIEGOR##############|YES         |
C123-------   |####AXON RESEARCH CORPORATION########|NO          |
C123-------   |############FENTECH INCORPORATED#####|NO          |
C123-------   |########PHAYDER CORPORATION##########|NO          |
C123-------   |############IZANAGI CORPORATION######|NO          |

我的方法是将表B中的启动子名称分解为单词,如下所示:

TABLE: C
Cust_ID       |PromoterNamePart                     |
--------------|-------------------------------------|
C123          |LIANDRI                              |
C123          |CORPORATION                          |
C123          |JEFF                                 |
C123          |LIANDRI                              |
C123          |K S                                  |
C123          |LIANDRI                              |
C123          |XAN                                  |
C123          |KRIEGOR                              |

然后删除重复项以处理歧义

TABLE: D
Cust_ID       |PromoterNamePart                     |
--------------|-------------------------------------|
C123          |LIANDRI                              |
C123          |JEFF                                 |
C123          |K S                                  |
C123          |XAN                                  |
C123          |KRIEGOR                              |

使用 D.PromoterNamePart <加入 Cust_ID 上的 A D 以及喜欢子句/ strong>在 A.TxnDescription 上,我希望得到我的输出。

现在,我坚持将表B分成C,因为单个字母的连续缩写将被视为一个单词。

任何关于如何处理此问题或任何替代解决方案的想法都将深表感谢。感谢。

1 个答案:

答案 0 :(得分:0)

对于在c中破坏表b,你需要一些东西进行拆分..这在本机mysql函数中不存在。但是你可以以两种方式构建你的(溢出)函数(至少)

  1. 使用存储过程
  2. 服务器端..使用拆分或爆炸功能从b和popoluate C中选择(取决于你的服务器端环境)
  3. 然后你有了表C

    可以像

    一样使用
    select distinct 
        a.Cust_id
      , a.PromoterNamePart
      , case when a.PromoterNamePart like concat('%',d.PromoterNamePart, '%') 
                      Then 'YES'
                       ELSE 'NO' 
              END as Fl_Exclude
    from tableA as a
    left join tableD as d