最近在开发中遇到了字段进行排序问题,字段类型是varchar类型 转换为INTEGER 进行排序:
举个例子:例如我们要进行排序的字段是 name_id 为varchar 要进行排序
select * from book where order by name_id desc, 此种排序肯定不是想要的下面两种方式为你想想的
select * from book order by (name_id+0) desc
select * from book order by (name_id as unsigned) desc
select * from book order by CONVERT(name_id,SIGNED) desc
mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
UNSIGNED 解释
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为–32768 ~ 32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
在sql语句中的意义
sql语句中,创建一个数据表时
ceate table user{
user_id int unsigned
}
当中的unsigned表示,数据项user_id恒为正整数。