Wie man mit Python Zeichenfolgen mit angehängten Teilen abgleicht, diese jedoch nicht abgleicht, wenn die angehängten Teile unterschiedlich sind
P粉676588738
P粉676588738 2023-09-20 19:02:23
0
1
721

Wie ordne ich Zeichenfolgen mit angehängten Teilen zu, aber nicht, wenn sie unterschiedliche angehängte Teile haben? Wenn ich beispielsweise eine Liste mit Namen habe und diese mit Namen in meiner Datenbank abgleichen muss:

|          My DataBase      |       Foreign table       |
| David James Malan Neeko   | David James Malan         |
| David James Malan Neeko   | David James Malan Mathew  |
| David James Malan Neeko   | David jam Mlan            |

Ich habe zuerst versucht, eine exakte Übereinstimmung zu erzielen, und wenn sie nicht gefunden wird, entferne ich immer wieder ein Zeichen vom Ende der externen Namenszeichenfolge und versuche es erneut mit der Übereinstimmung, bis nur noch ein Datensatz mit meiner Datenbank übereinstimmt.

Diese Technik entspricht dem ersten und dritten Beispiel in der Tabelle oben, das Problem besteht jedoch darin, dass sie auch mit dem zweiten Beispiel übereinstimmt, da das Programm jedes Mal ein Zeichen entfernt, bis das gesamte Mathew-Wort entfernt ist, und dann eine Übereinstimmung findet, nämlich In diesem Fall handelt es sich um eine falsche Übereinstimmung.

Irgendwelche Vorschläge, damit ich nur eine exakte Übereinstimmung oder eine Übereinstimmung herstellen kann, aber nur den zusätzlichen Teil des Namens auf einer Seite habe, sie aber nicht zuordnen kann, wenn beide zwei unterschiedliche Teile des Namens haben.

Sie können SQL oder Python verwenden, um dieses Problem zu lösen.

Vielen Dank im Voraus für Ihre Hilfe.

P粉676588738
P粉676588738

Antworte allen(1)
P粉145543872

这是非常低效的,将需要进行全表扫描。

SET @name_str = 'David James Malan Neeko';

SELECT *
FROM tbl
WHERE name LIKE CONCAT(@name_str, '%') OR @name_str LIKE CONCAT(name, '%')
ORDER BY name = @name_str DESC, name LIKE CONCAT(@name_str, '%') DESC;

ORDER BY 子句中的第一个表达式将首先对完全匹配进行排序,然后第二个表达式将对以整个搜索字符串开头的 name 进行排序,然后是以 name 开头的搜索字符串。

显然,你可以直接将搜索字符串作为参数传递,而不是使用 SET @name_str = '...';

这里有一些示例的 db<>fiddle

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage