Sql-Server

是否有排序規則按以下順序對以下字元串進行排序 1,2,3,6,10,10A,10B,11?

  • May 11, 2018

我有一個包含不同長度整數的 VARCHAR 列的數據庫。我想對它們進行排序,因此 10 在 9 之後,而不是 1,並且 70A 在 70 之後。我可以使用PATINDEX()、 CTE 和 WHERE 子句中的 CASE 語句來做到這一點。

但是,我想知道是否有一個排序規則,這將是不必要的。

不,排序是關於字母排序,取決於程式碼頁、重音、大小寫、寬度、假名。數字字元 (0-9) 沒有任何屬性。

無論如何9總是如此。10B

您必須按照您的說明將其拆分或按如下方式排序:

ORDER BY
   RIGHT('                              ' + MyColumn, 30)

右邊的長度決定了你有多少空格。

你當然可以:

  • 有 2 列使這變得不必要(並且更快)並有一個計算列來組合它們
  • 堅持前導零
  • 在 char 中右對齊(我上面 RIGHT 的儲存版本)

後兩個建議就像我上面的 RIGHT 一樣,略有不同。排序更快(無需處理 colukmn),但需要更多儲存空間

引用自:https://dba.stackexchange.com/questions/3828