Rumah > Soal Jawab > teks badan
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粉1455438722023-09-21 11:25:47
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.