簡體   English   中英

SQL,帶小數點輸入的varchar字段= ORDER BY未正確排序

[英]SQL, varchar field with decimals entries = ORDER BY not sorting proprely

所以我有一個帶有VARCHAR字段的表。 它用於對很多小數值進行排序:

假設我在VARCHAR字段中有以下條目:

  • 9.99
  • 263.28
  • 9.98

假設我要使用ORDER BY varchar DESC顯示所有條目。 結果將是:

  • 9.99
  • 9.98
  • 263.28

顯然, 263.28應該是第一個。 怎么了 ?

如果varchar字段中具有所有十進制值,則只需將其轉換為十進制,然后應用order by子句即可。 我對mysql數據類型和轉換函數沒有太多了解,但是在MS SQL中,您可以將其轉換為十進制,例如

ORDER BY CAST(field AS DECIMAL(18,2)) DESC

更新:

是的,在MySQL中也有強制轉換功能: http : //dev.mysql.com/doc/refman/5.0/en/cast-functions.html

如果按varchar列排序,則mysql將按字母順序排序。 第一個字符“ 2”在“ 9”之前。 這就是為什么您得到訂單的原因。 在order by子句中將varchar列強制轉換為十進制,並且應該可以按預期工作。

或者,您可以將“ 9.99”更新為“ 009.99”,以此類推,以便所有行都具有相同數量的字符。 然后,字母排序將與數字排序匹配。 我並不是建議您實際使用它作為解決方案-它只是向您顯示事物在數據庫中的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM