部分字符串匹配mysql
Posted
技术标签:
【中文标题】部分字符串匹配mysql【英文标题】:Partial string matching mysql 【发布时间】:2017-07-02 14:45:01 【问题描述】:我正在处理客户的银行交易数据,并希望排除包含部分或全部客户姓名的交易。 我的数据如下所示:
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 |
在 Cust_ID 上加入 A 和 D 以及使用 D.PromoterNamePartlike 子句时/strong> 在 A.TxnDescription 上,我期待得到我的输出。
现在,我被困在将表 B 拆分为 C,因为单个字母的连续缩写将被视为一个单词。
对于如何解决此问题或任何替代解决方案的任何想法将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:为了在 c 中破坏表 b,你需要一些东西来分割..这在本地 mysql 函数中不存在..但是你可以用两种方式(至少)构建你的(分割)函数
-
使用存储过程
服务器端 .. 从 b 中选择并使用拆分或分解功能正确填充 C(取决于您的服务器端环境)
然后一旦你有表 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
【讨论】:
以上是关于部分字符串匹配mysql的主要内容,如果未能解决你的问题,请参考以下文章