需求:页面录入的内容按序号排序,但是当序号大于9的时候,页面呈现顺序不对,10开头的排在了前面,SQL如下:
SELECT * FROM test_sort ORDER BY plan_number;
排序结果如下:
id | plan_number | remark | sort |
1 | 1 | 1 | 0001 |
2 | 1.1 | 1.1 | 0001.0001 |
11 | 1.10 | 1.10 | 0001.0010 |
12 | 1.11 | 1.11 | 0001.0011 |
3 | 1.2 | 1.2 | 0001.0002 |
4 | 1.3 | 1.3 | 0001.0003 |
5 | 1.4 | 1.4 | 0001.0004 |
6 | 1.5 | 1.5 | 0001.0005 |
7 | 1.6 | 1.6 | 0001.0006 |
8 | 1.7 | 1.7 | 0001.0007 |
9 | 1.8 | 1.8 | 0001.0008 |
10 | 1.9 | 1.9 | 0001.0009 |
13 | 2 | 2 | 0002 |
14 | 2.1 | 2.1 | 0002.0001 |
1.1下面应该是1.2,所以在原表增加了sort字段,按sort字段排序,SQL如下:
SELECT * FROM test_sort ORDER BY sort;
排序结果如下:
id | plan_number | remark | sort |
1 | 1 | 1 | 0001 |
2 | 1.1 | 1.1 | 0001.0001 |
3 | 1.2 | 1.2 | 0001.0002 |
4 | 1.3 | 1.3 | 0001.0003 |
5 | 1.4 | 1.4 | 0001.0004 |
6 | 1.5 | 1.5 | 0001.0005 |
7 | 1.6 | 1.6 | 0001.0006 |
8 | 1.7 | 1.7 | 0001.0007 |
9 | 1.8 | 1.8 | 0001.0008 |
10 | 1.9 | 1.9 | 0001.0009 |
11 | 1.10 | 1.10 | 0001.0010 |
12 | 1.11 | 1.11 | 0001.0011 |
13 | 2 | 2 | 0002 |
14 | 2.1 | 2.1 | 0002.0001 |
页面排序正确,符合需求。
补位生成排序号,方法如下:
/**
* 根据章节号生成排序序号
* 补位生成序号
* 例如: 4.9 ----> 0004.0009
* 4.10 ---> 0004.0010
*/
public static String newItemNoSort(String itemNo){
String[] strs = itemNo.split("\\.");
StringBuffer sbf = new StringBuffer();
String initData = "0000";
for(int i=0;i<strs.length;i++){
String temp = strs[i];
int tempLength = temp.length();
if(tempLength < 4){
int surplus = 4 - tempLength;
temp = initData.substring(0,surplus) + temp;
sbf.append(temp);
if(i != strs.length -1 ){
sbf.append(".");
}
}
}
return sbf.toString();
}