对varchar列进行排序

时间:2013-11-26 11:17:58

标签: mysql

我有一个章节列,它的值类似于

Chapter 1
Chapter 2
Chapter 11
Chapter 12
Chapter 3
Chapter 4

订购时,显示为

Chapter 1
Chapter 11
Chapter 12
Chapter 2
Chapter 3
Chapter 4

我需要这样

Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 11
Chapter 12

2 个答案:

答案 0 :(得分:2)

这称为Natural Sort。你能试试吗?但没有完美的自然分类方法。

SELECT col
FROM tab
ORDER BY LENGTH(col), col;

即使前缀不一样,如果像这样修改也可以进行排序(我是对的吗?我认为第一个查询在OP的情况下效果很好。但不确定下面的查询是否一般)

SELECT col
FROM tab
ORDER BY col, LENGTH(col), col;

答案 1 :(得分:2)

假设你总是有“章节”,然后是一个数字,你可以试试这个:

SELECT chapters 
FROM tab1 
ORDER BY LENGTH(chapters), chapters

sqlfiddle demo