• 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函数。

  • 相关阅读:
    【PHP】 lumen 输出sql信息
    Go学习笔记-使用MySQL数据库
    PHP检测函数是否存在
    Javascript边框闪烁提示
    【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装
    python-mysql windows diver地址
    【转载】Python Flask 开发环境搭建(Windows)
    【转载】agentzh 的 Nginx 教程(版本 2016.07.21)
    【转载】写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
    【转载】从零开始搭建论坛(三):Flask框架简单介绍
  • 原文地址:https://www.cnblogs.com/yuexin/p/3443913.html
Copyright © 2020-2023  润新知