2016-05-23 224 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'); 
相關問題