mysql排序convert_mysql里的varchar值转换为可排序的值(MySql varchar排序 CAST ,CONVERT)...
自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改之。下面简单说一下MySQL的varchar排序问题,引以为戒。
show
create
table cardserver /G
***************************
1. row
***************************
Table: cardserver
Create
Table:
CREATE
TABLE
`cardserver`
(
`id`
int
(
11
)
NOT
NULL
default
'0'
,
`ver`
int
(
11
)
default
NULL
,
`createtime`
datetime
default
NULL
,
`updatetime`
datetime
default
NULL
,
`game_id`
int
(
2
)
NOT
NULL
default
'0'
,
`server_id`
varchar
(
2
)
NOT
NULL
default
''
,
`server_name`
varchar
(
40
)
NOT
NULL
default
''
,
PRIMARY KEY
(
`id`
)
,
UNIQUE
KEY
`game_id_server_id`
(
`game_id`
,
`server_id`
)
,
UNIQUE
KEY
`game_id_server_name`
(
`game_id`
,
`server_name`
)
)
ENGINE=InnoDB
DEFAULT
CHARSET
=gbk
1 row
in
set
(
0.00 sec
)
下面,我从数据库里面以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排序convert_mysql里的varchar值转换为可排序的值(MySql varchar排序 CAST ,CONVERT)...相关推荐
- MySQL 所推荐的左右值法(毗邻目录法、预排序历遍法)
毗邻目录法: 这种方法说白了就是子类,依赖父类,父类依赖爷爷类,爷爷类可以有多个儿子类,跟父类平级的类.一层一层的. 预排序历遍法: 这种算法比较高端,使用的是mysql官方推荐的左右算法. 使用场合 ...
- 关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别
一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...
- mysql char null_关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别...
一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...
- mysql varchar cast_MYSQL VARCHAR排序 CAST ,CONVERT函数 类型转换
自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为integer(2)的,但是今天在后台发现排序有问题,varchar排序有问题,所以该怎么解决呢? 示例表结构: 先来看一下,我 ...
- mysql+两行+一样+筛选_MySQL计算相邻两行某列差值的方法
简述 博主最近因工作任务缠身,都无暇顾及到我的这片自留地了.前段时间稍有空闲,花了较多的精力学习<啊哈算法>,从中学习到很多之前没有太注重的内容,收益颇丰.但是这些算法题目还没有看完,等后 ...
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- mysql group by 区分null 值和非null_你知道mysql中空值和null值的区别吗
前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值.以下带来示例给大家进行讲解. 建表 create table tes ...
- MySQL buffer pool里的三种链表和三种page
mysql buffer pool里的三种链表和三种page buffer pool是通过三种list来管理的 1) free list 2) lru list 3) flush list buffe ...
- mysql date 默认值_通过Oracle DB了解MySQL
Oracle数据库是业界的翘楚,各行各业拥有大量的Oracle DB的DBA,本文尝试通过将Oracle与MySQL数据库的架构.安全.模式对象.数据类型及数据存储进行对比,以方便熟悉Oracle数据 ...
最新文章
- 如何设计权限管理模块
- iOS学习资源(三)
- linux系统中建立网络白名单,Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤
- android log system
- 字符串-字符串的查找和替换
- 时光机穿梭---工作区和暂存区
- javascript --- 创建一个二维数组
- 纪中A组模拟赛总结(2021.7.16)
- aspx 远程上传服务器,ASP.NET中利用WebClient上传图片到远程服务的方法
- cron表达式每一个小时_嵊泗新闻网丨两千小时的热爱——任春华:用志愿服务守护每一个笑容...
- 复杂系统建模计算机仿真是干嘛的,复杂系统建模和 与仿真.ppt
- 异常和Log4j日志
- roseha修改服务器ip地址,roseha 9.0 for windows维护手册_v2.0-2015-04.pdf
- html css画个人印章
- 1143 Lowest Common Ancestor
- 华为电脑怎么录屏?分享你两个好方法
- 学习一样新东西行而有效的方法
- spring cloud gateway - 日志
- 【论文写作】——公式居中,编号居右
- EOS将发布的官方EVM怎么样?