2016-05-23 165 views
0

我们正在根据帐号验证银行名称。在多字词字符串中匹配单词的单词

第三方API在提供帐号时返回银行的名称。这是一个多字字符串,并且没有可以返回的固定值列表。

我们需要检查由API返回的银行对照我们数据库中的表中的银行名称列表。要做到这一点,我们有一张表格,里面有我们希望用于匹配的银行名称的同义词。请参阅下面的SQL。

要做到这一点,我们希望找到我们的表匹配“香港”的,“红”或“上海”,如果API返回的“香港上海汇丰银行”或“香港&上海汇丰银行有限公司'等

看到我们希望匹配我们表中的一个单词,针对多字字符串,我不知道如何在MySQL中执行此操作。

SQL在我们的数据库中的银行名称表....

CREATE TABLE IF NOT EXISTS `bank_names` (
    `bank_name_id` int(11) NOT NULL AUTO_INCREMENT, 
    `bank` varchar(50) NOT NULL, 
    PRIMARY KEY (`bank_name_id`), 
    UNIQUE KEY `bank` (`bank`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

INSERT INTO `bank_names` (`bank`) VALUES 
('kong'), 
('hong'), 
('shanghai'), 
('westminster'), 
('citi'), 
('citibank'); 

我已经试过......

SELECT * 
FROM `bank_names` 
WHERE bank LIKE '%Hong Kong and Shanghai Banking Corporation%'; 

这显然是行不通的。

预先感谢您。

+0

你可以使用'FIND_IN_SET'或'IN' ...,只要将你的字符串转换为数组并使用它们即可。 –

回答

1

使用IN()声明不LIKE

SELECT * FROM `bank_names` 
WHERE `bank` in('Hong','Kong','and','Shanghai'...) 

或者与LIKE

SELECT * FROM `bank_names` t 
WHERE '%Hong Kong and Shanghai Banking Corporation' like concat('%',t.bank,'%') 
1

试试这个:

SELECT * 
FROM `bank_names` 
WHERE 'Hong Kong and Shanghai Banking Corporation' LIKE CONCAT('%', bank, '%') ; 

这将返回前三个样本记录作为OP上市。

0

使用INFIND_IN_SET ..

SELECT * 
FROM `bank_names` 
WHERE bank IN ('Hong', 'Kong', 'and', 'Shanghai', 'Banking', 'Corporation'); 

OR

SELECT * 
FROM `bank_names` 
WHERE FIND_IN_SET(bank, 'Hong', 'Kong', 'and', 'Shanghai', 'Banking', 'Corporation'); 
相关问题