我试图写一个查询,将匹配部分匹配存储的名称值。
我的数据库如下所示
块引用
FirstName | Middle Name | Surname
----------------------------------
Joe | James | Bloggs
J | J | Bloggs
Joe | | Bloggs
Jane | | Bloggs
现在如果用户输入他们的名字
J Bloggs
我的查询应该返回所有4行,因为它们都是可能匹配的。
类似地,如果用户输入名称
J J Bloggs
应返回所有行。
如果用户以
Joe Bloggs
只有前三个应该归还。
我试过以下方法
SELECT *
FROM PERSON
WHERE CONCAT(' ',FirstName,' ',MiddleName,' ', Surname) LIKE '% Joe%'
AND CONCAT(' ',FirstName,' ',MiddleName,' ', Surname, ' ') LIKE '% Bloggs%';
但这不会返回'j bloggs'。
有什么想法吗?
2条答案
按热度按时间xu3bshqb1#
我想你可能需要
OR
而不是AND
...7cjasjjr2#
如果我正确理解了您的逻辑,那么三个输入名称组件中的任何一个都被认为是匹配的,如果它是表中某个值的子字符串,反之亦然。也就是说,
J
比赛Joe
,但也Joe
匹配到J
. 使用此逻辑,我们可以编写以下查询:演示
请注意,中间名有一些附加逻辑。如果记录中缺少中间名(即
NULL
),然后我们将要求中间名匹配。