`
John_Kong19
  • 浏览: 278115 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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,现成的东西我们怎能放过?

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

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

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函数。
分享到:
评论

相关推荐

    mysql 按中文字段排序

    出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。 解决方法: 对于包含中文的字段...

    MySQL对中文进行排序详解及实例

    这里的`CONVERT`函数将`user_name`字段转换为GBK编码,GBK编码是一种包含了大部分中文字符的双字节编码,它允许我们按照中文的拼音进行排序。请注意,如果你的数据库使用的是UTF-8或其他编码,你需要相应地调整字符...

    修改MySQL数据库中表和表中字段的编码方式的方法

    这个命令会更改`test`表中名为`name`的字段的字符集为`utf8`,同时保持其VARCHAR类型和非空约束不变。如果字段已有数据,记得先备份,因为修改字符集可能会影响数据的表示。 在执行这些操作之前,确保你理解表和...

    MySQL中把varchar类型转为date类型方法详解

    在MySQL数据库中,经常遇到需要将存储日期信息的VARCHAR字段转换为DATE类型的情况。这是因为VARCHAR类型通常用于存储非结构化的文本数据,而DATE类型则更适合处理日期和时间的数据。在处理涉及日期计算或比较的查询...

    mysql中文排序注意事项与实现方法

    mysql中文排序方法1 mysql在查询字符串时是大小写不敏感的,在编绎mysql时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,比较应急的方法是对于包含中文的字段加上”...

    MySQL中文参考手册.chm

    8.4.4.4 排序行 8.4.4.5 日期计算 8.4.4.6 NULL值操作 8.4.4.7 模式匹配 8.4.4.8 行计数 8.4.5 使用多个数据库表 8.5 获得数据库和表的信息 8.6 以批处理模式使用mysql ...

    MySQL按常规排序、自定义排序和按中文拼音字母排序的方法

    MySQL的`CONVERT()`函数可以帮助我们将UTF-8编码的字段转换为GBK,以便进行拼音排序: ```sql SELECT * FROM test ORDER BY CONVERT(value USING GBK) ASC; ``` 如果数据库字段确实使用的是UTF-8,确保在执行此...

    presto sql 与mysql sql 对比.pdf

    例如,在 MySQL SQL 中,`where` 条件中的字符串类型可以隐式转换为数字类型,但这可能会造成索引不起效和非预期的结果。 聚合函数 Presto SQL 和 MySQL SQL 都支持聚合函数,如 `count()`、`sum()`、`avg()` 等。...

    Oracle 中文字段进行排序的sql语句

    在Oracle数据库中,对中文字段进行排序是一项常见的需求,特别是在处理中文字符的数据时。Oracle提供了多种方式来实现中文字段的排序,包括按照笔画、部首以及拼音。下面将详细阐述这些方法及其背后的原理。 首先,...

    MySQL 5.1中文手冊

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    MySQL中TEXT与BLOB字段类型的区别

    在MySQL中,TEXT和BLOB列在存储和检索时都不会进行大小写转换,这意味大小写敏感的比较和排序将基于实际输入的字节。 5. **严格模式** 在非严格模式下,如果尝试向BLOB或TEXT列插入超过列定义长度的数据,MySQL会...

    MySQL中文参考手册

    + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...

    PHP与MYSQL中UTF8编码的中文排序实例

    3. **查询时转换**:如果不想修改表结构,可以在查询时使用`CONVERT()`函数,将字段转换为GBK编码进行排序,如下所示: ```sql SELECT * FROM `mytable` ORDER BY CONVERT(`chineseColumnName` USING gbk); ``` ...

    mysql如何按照中文排序解决方案

    总之,要解决MySQL中的中文排序问题,关键在于选择正确的字符集和校对规则,并在查询时使用`CONVERT`函数转换字符集进行排序。确保整个系统(包括数据库、表、字段、客户端和查询)的字符集设置一致,才能实现准确的...

    Oracle到mysql转换的问题总结.doc

    Oracle到MySQL转换的过程中,会遇到一系列的语法差异和数据类型的区别。以下是对这些差异的详细说明: 1. **数据类型转换**: - `NUMBER(10,0)` 在 Oracle 中对应于 MySQL 中的 `INT` 类型,而 `NUMBER(10,2)` 则...

    让MySQL支持中文排序的实现方法

    在MySQL中,中文字符的排序和查找结果通常不符合预期,特别是在基于拉丁字母的字符集如ISO-8859下,中文字符的大小写转换规则并不适用于中文。 为了解决这个问题,有两种主要的实现方法: 1. **字段属性设置**: ...

Global site tag (gtag.js) - Google Analytics