gpt4 book ai didi

mysql - 部分/缩写名称匹配

转载 作者:行者123 更新时间:2023-11-29 02:40:41 25 4
gpt4 key购买 nike

我正在尝试编写一个查询,将部分匹配项与存储的名称值进行匹配。

我的数据库如下所示

Blockquote

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 J Bloggs”。

有什么想法吗?

最佳答案

如果我正确理解您的逻辑,那么如果三个输入名称组件中的任何一个是表中某个值的子字符串,则它被认为是匹配的,反之亦然。也就是说,J 匹配 Joe,而且 Joe 也匹配 J。使用此逻辑,我们可以编写以下查询:

SELECT *
FROM yourTable
WHERE
(INSTR(FirstName, 'J') > 0 OR INSTR('J', FirstName) > 0) AND
(INSTR(MiddleName, 'J') > 0 OR INSTR('J', MiddleName) > 0 OR MiddleName IS NULL) AND
(INSTR(Surname, 'Bloggs') > 0 OR INSTR('Bloggs', Surname) > 0);

Demo

请注意中间名有一些额外的逻辑。如果记录中缺少中间名(即 NULL),那么我们将要求中间名匹配。

关于mysql - 部分/缩写名称匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52762058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com