對SQL 中嵌入數字的字串列進行排序
對SQL 中包含數字的字串列進行排序可能會帶來挑戰。許多資料庫的自然排序演算法將數字放置在錯誤的順序中,例如將「a 12」放置在「a 1」之後。這種行為對於大多數應用程式來說是可以接受的,但對於特定需求來說可能是不受歡迎的。
是否可以使用純 SQL 對嵌入數字的字串列進行排序?
解決方案
假設該列遵循「WORD space NUMBER」的特定模式,則可以使用以下程式碼片段對列進行正確排序:
SELECT * FROM table ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)
其工作原理如下:
概念證明
以下範例示範了排序行為:
mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11'); mysql> SELECT * FROM t ORDER BY st; mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
第二個查詢正確排序,將對結果進行正確排序,將對結果進行正確排序「a 1」放在「a 12」之前。
注意事項
如果列模式與「WORD space NUMBER」不同,則可能需要不同的解法。
增強
以下增強查詢添加雙重排序以打破帶有數字值的字母前綴:
ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)
此修改後的代碼片段提供了更全面的排序解決方案。
以上是如何在 SQL 中對嵌入數字的字串列進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!