我们正在根据帐号验证银行名称。
第三方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 :(得分:1)
试试这个:
SELECT *
FROM `bank_names`
WHERE 'Hong Kong and Shanghai Banking Corporation' LIKE CONCAT('%', bank, '%') ;
这应该返回OP中列出的前三个样本记录。
答案 1 :(得分: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,'%')
答案 2 :(得分:0)
使用IN
或FIND_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');