我想編寫一個查詢,該查詢將按照該順序獲取給定字符串及其子字符串的最近匹配字符串。使用SQL查詢查找最接近的匹配字符串及其子串
例如,可以說我有一列所有名字的表。如果我想搜索名稱"ATUL"
,則結果應列出匹配第一個"ATUL%"
,然後"ATU%"
,然後"AT%"
,然後"A%"
匹配的所有不同名稱,最後是所有剩餘的記錄。
(然後我會根據我的需求回暖第N個記錄出來的)查詢
鮮明的工會是一個解決方案,我能想到的。有沒有更有效的方法來做到這一點?
UPDATE:
感謝下面的答案。同時,我試圖在我自己的東西,發現了這個查詢產生預期的結果,只要我有用戶名列索引
select * FROM all_usernames WHERE (username LIKE 'atul%') or (username LIKE 'atu%') or (username LIKE 'at%') or (username LIKE 'a%') or (username LIKE '%');
但它是標準的行爲,或者是它,我只是得到它巧合?
雖然你不需要像「OTUL」這樣的東西嗎?我可能是錯的,但它聽起來像你想要找到最小漢明距離的字符串,而不只是相同的初始字符。 – Timekiller
只有通過逐個消除最後一個字符而生成的子字符串。 – Atul
看起來你想要計算字符串之間的Levenstein距離。看問題:http://stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search和實現:http://www.artfulsoftware.com/infotree/queries.php# 552 – Ingaz