Cara memadankan rentetan dengan bahagian yang dilampirkan menggunakan Python, tetapi tidak memadankannya jika bahagian yang dilampirkan berbeza
P粉676588738
P粉676588738 2023-09-20 19:02:23
0
1
706

Bagaimana untuk memadankan rentetan dengan bahagian yang dilampirkan, tetapi tidak memadankannya jika ia mempunyai bahagian yang dipasang yang berbeza? Contohnya, jika saya mempunyai senarai nama dan perlu memadankannya dengan nama dalam pangkalan data saya:

|          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            |

Saya telah mencuba melakukan padanan tepat dahulu, dan jika tidak ditemui, saya terus mengalih keluar aksara dari hujung rentetan nama luaran dan cuba memadankan sekali lagi sehingga hanya satu rekod sepadan dengan pangkalan data saya.

Teknik ini sepadan dengan contoh pertama dan ketiga dalam jadual di atas, tetapi masalahnya ialah ia juga sepadan dengan contoh kedua kerana program ini mengalih keluar satu aksara setiap kali sehingga keseluruhan perkataan Mathew dialih keluar, dan kemudian ia menemui satu padanan, iaitu padanan palsu dalam kes ini.

Sebarang cadangan supaya saya boleh melakukan padanan tepat sahaja atau padanan tetapi hanya mempunyai bahagian tambahan nama pada satu bahagian, tetapi tidak sepadan jika kedua-duanya mempunyai dua bahagian nama yang berbeza.

Anda boleh menggunakan SQL atau Python untuk menyelesaikan masalah ini.

Terima kasih terlebih dahulu atas bantuan anda.

P粉676588738
P粉676588738

membalas semua(1)
P粉145543872

Ini sangat tidak cekap dan memerlukan imbasan meja penuh.

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;
Rentetan carian bermula dengan

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

Jelas sekali, anda boleh menghantar rentetan carian terus sebagai parameter dan bukannya menggunakan SET @name_str = '...';.

Berikut ialah beberapa contoh db<>fiddle.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan