zoukankan      html  css  js  c++  java
  • mysql中字段类型转换排序

    表中字段server_id是varchar类型,现在我们查询数据时想以server_id排一下序,排序后的结果

    select server_id from cardserver where game_id = 1 order by server_id desc limit 10;
    

     +-----------+
    | server_id |
    +-----------+
    | 8         |
    | 7         |
    | 6         |
    | 5         |
    | 4         |
    | 3         |
    | 2         |
    | 10        |
    | 1         |
    +-----------+

    很明显,我们想要的结果应该是 10,8,7,6,5 这样的。但是这个10排在了2的后面。按照字符串来排的。其实我们是想把它当做数值来排。

    手动转换类型:

    用下面的方法就可以了,使server_id+0之后再排序,问题解决了。

    select server_id from cardserver where game_id = 1 order by server_id+0 desc limit 10;
    

    +-----------+

    | server_id |

    +-----------+

    | 10        |

    | 8         |

    | 7         |

    | 6         |

    | 5         |

    | 4         |

    | 3         |

    | 2         |

    | 1         |

    +-----------+

    使用MySQL函数CAST/CONVERT:

    mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?

    这个类型 可以是以下值其中的 一个:

    BINARY[(N)]

    CHAR[(N)]

    DATE

    DATETIME

    DECIMAL

    SIGNED [INTEGER]

    TIME

    UNSIGNED [INTEGER]

    所以我们也可以用CAST解决问题:

    CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

    select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;
    

     +-----------+
    | server_id |
    +-----------+
    | 10        |
    | 8         |
    | 7         |
    | 6         |
    | 5         |
    | 4         |
    | 3         |
    | 2         |
    | 1         |
    +-----------+

    也可以使用CONVERT来搞定此问题:

    select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;
    

     +-----------+
    | server_id |
    +-----------+
    | 10        |
    | 8         |
    | 7         |
    | 6         |
    | 5         |
    | 4         |
    | 3         |
    | 2         |
    | 1         |
    +-----------+

    总结:

    条条大道通罗马,条条小路通我家。不管是啥方法,解决问题就是好方法。当然,既然MySQL为我们提供了现成的函数。我们为何不让代码显得更漂亮些呢?呵呵。

    所以MySql varchar排序推荐使用CAST或CONVERT函数。

  • 相关阅读:
    机器学习第一练(铁达尼号罹难者预测)
    Codewars题记 :Find the missing letter
    Codewars题记 :Take a Ten Minute Walk
    Codewars题记 :Some numbers have funny properties.
    Codewars题记 :Count the number of Duplicates
    Java图片合成工具类
    解决Libreoffice在Linux服务器上,重启Tomcat但是Libreoffice8100端口还一直占用的问题
    Java对Linux进程关闭
    Java多张图片合成PDF
    java下载文件到本地磁盘
  • 原文地址:https://www.cnblogs.com/yuexin/p/3443913.html
Copyright © 2011-2022 走看看