Mysql按數字大小排序String字段

 問題是這樣的,當咱們按由大到小的順序排序一組數字的時候,它應該如此:wordpress

  1. 9800
  2. 8000
  3. 900

但若是是這些數字是以String類型存儲的話,直接排序的結果會是這樣:post

  1. 9800
  2. 900
  3. 8000

固然多數狀況下咱們會把數字存儲爲數字型,就可避免這一問題。但仍是有一些情形,數字被存儲爲String。code

好比wordpress的postmetas表,它的meta_value已經固定了就是String。當咱們須要把meta_value按數字大小排序的時候,直接寫order by meta_value就不能達到咱們所須要的目的。排序

class

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY meta_value DESC;
獲得的結果:meta

  1. 9800
  2. 900
  3. 8000

解決的方法是,在排序語句裏把meta_value轉成數字再排序,寫做-meta_value方法

word

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY -meta_value ASC;
獲得的結果:di

  1. 9800
  2. 8000
  3. 900

此時採用的是按meta_value的負值排序,因此如需獲得由大到小的效果,須要使用ASC而非DESC。固然也能夠直接用--meta_value DESCco

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY --meta_value DESC;
獲得的結果同樣是:

    1. 9800
    2. 8000
    3. 900
相關文章
相關標籤/搜索