本文是个人学习笔记,内容主要包含数据表里的数据排序,学习文档来自易百教程:http://www.yiibai.com/mysql/
ORDER结合FIELD()对列取值映射后排序
select orderNumber,status from orders
order by field(status,'In Process','On Hold','Cancelled','Resolved','Disputed','Shipped');
#对orders数据表status按自定义映射,将'In Process','On Hold','Cancelled','Resolved','Disputed','Shipped'映射成1,2,3,4,5,6后按数字排序
数据列中字母和数字同时存在时排序方法
create table if not exist items(id int auto_increment primary key,
item_no varchar(255) not null);
insert into items(item_no) values('1'),('1C'),('10Z'),('2A'),('2'),('3C'),('20D');
select item_no from items order by item_no;
#排序结果10开头的项和1在一起,不在2之后
#将item_no列分成两列:prefix 和 suffix.prefix列存储item_no的数字部分,suffix列存储字母部分.
#查询首先对数据进行数字排序,并按字母顺序对数据进行排序.
#这个解决方案的缺点是必须在插入或更新之前将item_no值分成两部分.此外,当查询数据时,必须将这两列组合成一列.
select item_no from items order by cast(item_no as unsigned),item_no;
#使用类型转换将item_no数据转换为无符号整数.其次,使用ORDER BY子句对数字进行数字排序,然后按字母顺序排列.
#MySQL支持各种字符集,如latin1/utf8等.可用SHOW CHARACTER SET语句来获取MySQL数据库服务器支持的所有字符集
#用LENGTH函数获取,以字节为单位的字符串长度
#用CHAR_LENGTH函数获取,以字符为单位的字符串的长度
set @s=convert('Mysql' using latin1);
select char_length(@s),length(@s);