在SQL 中對包含數字的字串列進行排序
當嘗試使用SQL 中的預設順序對包含數值的字串當列進行排序時,自然排序演算法可能不會產生期望的結果。具體來說,與數值相比,帶有前導零的數字可以任意放置。
要解決此問題,請考慮以下SQL 查詢:
<code class="sql">SELECT * FROM table ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)</code>
此查詢假設列資料如下「STRING SPACE NUMBER」的模式並使用SUBSTRING 函數提取每個字串的數字部分。透過將提取的值轉換為有符號整數,查詢可以根據數值而不是字串表示形式對結果進行排序。
以下是示範功能的範例:
<code class="sql">INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11'); SELECT * FROM t ORDER BY st; +----+------+ | id | st | +----+------+ | 1 | a 1 | | 4 | a 11 | | 2 | a 12 | | 3 | a 6 | +----+------+ SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED); +----+------+ | id | st | +----+------+ | 1 | a 1 | | 3 | a 6 | | 4 | a 11 | | 2 | a 12 | +----+------+</code>
此查詢會根據字串中的數值正確對行進行排序。如果字串資料遵循不同的模式,則可能需要進行調整才能準確提取數字部分。
以上是如何在 SQL 中對包含數字的字串列進行排序:尋址前導零並實現數字順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!