2012-06-29 15 views
0

我有這列叫做code看起來像:1-100-ETC-601-100-ETC-201-100-ETC-70使用MySQL的ORDER BY子句中,是有可能爲了通過某些字段和自定義爲了

最後兩個字符總是要開始或者6,2或7.

如果我按ORDER BY SUBSTRING(code,13)ASC或DESC進行排序,它們將按數字順序排序。以爲這不是我想要的(或客戶想要的)。

正確的排序順序應該是:6,然後2然後7

只是想知道這是否可能只通過使用SQL查詢。

回答

3

你可以使用MySQL的FIELD()功能:

ORDER BY FIELD(SUBSTRING(code, 11, 1), '6', '2', '7') 
+1

你想添加「,SUBSTRING(code,12)」到那個以正確的順序得到其餘的代碼,如果它包括60,61,62等,對嗎? – Ghost

+0

@ user1428799:聽起來對我很好。 – eggyal

+0

這就是我所做的。運作良好。謝謝。這個也比CASE方法稍短。 – 40Plot

1

使用case語句。

ORDER BY CASE WHEN SUBSTRING(code,11) = '6' THEN '1' + substring(code, 12) ELSE SUBSTRING(code,11) END 

應在6轉換爲一個用於與2並且在這種情況下,7排序

(子串是1索引在MySQL,所以它是11,而不是10)

+0

太棒了!謝謝..它的工作原理。我想知道這是否顯着減慢了查詢速度? – 40Plot

+0

我不能說mysql,但我知道在SQL服務器中它向執行計劃添加了一個步驟。然而,它看起來並不像它影響太多,順序仍然會佔用更多的權力。您可以嘗試使用Explain來運行這兩個查詢,並查看數據的結果。 – Ghost