SQL排序,类似A-1,A-2,A-3,...A-10... 如题,要求SQL排序为A-1,A-2,A-3,...A-10... 而非A-1,A-10,...A-2,A-3...即-前字符排序,-后字符也排序最好能写一SQL函数,代码实现亦可 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sql不会,我觉得做起来也麻烦用程序帮你写了个public class Test2 { public static void main(String[] args){ String[] arr=new String[7]; arr[0]="A-2"; arr[1]="A-4"; arr[2]="A-1"; arr[3]="A-3"; arr[4]="B-3"; arr[5]="B-1"; arr[6]="B-2"; Arrays.sort(arr); for(String str:arr){ System.out.println(str); } }} 谢valen_jia 我想你并没有测试过,若再加句arr[7]="A-10",你就会发现它将这样排序:A-1,A-10,A-2,A-3,...B-3与sql中直接order by filedname所得结果一样,横杠前要排序,横杠后也需要排序,最好是不限数字或字符(如:1-AA,中-A...) -后字符也排序, 就应该是A-1,A-10,...A-2,A-3. 除非-后按数字来排 额... sgdb 说的有理-后按数字排序(汗,客户该不会在-后弄个字符什么来着,改天还得问问) 又帮你写了个,你再试试如果都按字符的话,就没办法了,我觉得,就用我第一次给你的好了package test;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;public class Test2 { public static void main(String[] args){ String[] arr=new String[8]; arr[0]="A-2"; arr[1]="A-4"; arr[2]="A-1"; arr[3]="A-3"; arr[4]="B-3"; arr[5]="B-1"; arr[6]="B-2"; arr[7]="A-10"; //先把前面的排一下,不管后面的 Arrays.sort(arr); //存放后面的数字 List<Integer> list=new ArrayList<Integer>(); Map<String, List> map=new HashMap<String, List>(); //循环分割 for(int i=0;i<arr.length;i++){ if(i!=arr.length-1){ String[] str1=arr[i].split("-"); String[] str2=arr[i+1].split("-"); if(!str1[0].equals(str2[0])){ map.put(str1[0], list); list=new ArrayList<Integer>(); }else{ list.add(Integer.parseInt(str1[1])); } }else{ String[] str1=arr[i].split("-"); list.add(Integer.parseInt(str1[1])); map.put(str1[0], list); } } Map<String, List> mapNew=new HashMap<String, List>(); //将map里每个list拿出来排序一下 Set<String> set=map.keySet(); for(String key:set){ List li=map.get(key); int[] a=new int[li.size()]; for (int i = 0; i < li.size(); i++) { a[i]=(Integer)li.get(i); } for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length - i - 1; j++) { if (a[j] > a[j + 1]) { int temp; temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } List<Integer> l=new ArrayList<Integer>(); for (int i = 0; i < a.length; i++) { l.add(a[i]); } mapNew.put(key, l); } // List<String> result=new ArrayList<String>(); for(String key:set){ List li=mapNew.get(key); for(int i=0;i<li.size();i++){ result.add(key+"-"+li.get(i)); } } for(String ss:result){ System.out.println(ss); } }} 假设这个字段为id--oracleselect * from table order by substrb(id,1,instrb(id,'-')-1), to_number(substrb(id,instrb(id,'-')+1)) 感谢valen_jia 如此不厌其烦帮忙写这么多代码也谢谢liuyar 在数据规范的情况下确实很好用结贴给分!人人有份. JSP 中表单提交问题 除了用Vector 还可以那些? 新手提问~!我在Myeclipse(eclipse3.2)编写servlet不能自动生成web.xml文件啊。请教高手 JSP中乱码问题,急! 对开发web报表的有兴趣的朋友请加我好友 56138474 microsoft development enviroment 6.0 是個什麼東西? 虚心请教图片显示问题! sevlet字节码文件到底应该放哪里???怎么始终找不到啊??? 请问谁有控制内容显示格式的bean或函数 我今天终于迈出了模式转变的第一步!!! JSP控制的问题 推荐一下做logo,还有打字就能生成按钮的网站
用程序帮你写了个public class Test2 {
public static void main(String[] args){
String[] arr=new String[7];
arr[0]="A-2";
arr[1]="A-4";
arr[2]="A-1";
arr[3]="A-3";
arr[4]="B-3";
arr[5]="B-1";
arr[6]="B-2";
Arrays.sort(arr);
for(String str:arr){
System.out.println(str);
}
}
}
我想你并没有测试过,若再加句arr[7]="A-10",你就会发现它将这样排序:A-1,A-10,A-2,A-3,...B-3
与sql中直接order by filedname所得结果一样,横杠前要排序,横杠后也需要排序,最好是不限数字或字符(如:1-AA,中-A...)
-后按数字排序(汗,客户该不会在-后弄个字符什么来着,改天还得问问)
如果都按字符的话,就没办法了,我觉得,就用我第一次给你的好了
package test;import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;public class Test2 {
public static void main(String[] args){
String[] arr=new String[8];
arr[0]="A-2";
arr[1]="A-4";
arr[2]="A-1";
arr[3]="A-3";
arr[4]="B-3";
arr[5]="B-1";
arr[6]="B-2";
arr[7]="A-10";
//先把前面的排一下,不管后面的
Arrays.sort(arr);
//存放后面的数字
List<Integer> list=new ArrayList<Integer>();
Map<String, List> map=new HashMap<String, List>();
//循环分割
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1){
String[] str1=arr[i].split("-");
String[] str2=arr[i+1].split("-");
if(!str1[0].equals(str2[0])){
map.put(str1[0], list);
list=new ArrayList<Integer>();
}else{
list.add(Integer.parseInt(str1[1]));
}
}else{
String[] str1=arr[i].split("-");
list.add(Integer.parseInt(str1[1]));
map.put(str1[0], list);
}
}
Map<String, List> mapNew=new HashMap<String, List>();
//将map里每个list拿出来排序一下
Set<String> set=map.keySet();
for(String key:set){
List li=map.get(key);
int[] a=new int[li.size()];
for (int i = 0; i < li.size(); i++) {
a[i]=(Integer)li.get(i);
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
List<Integer> l=new ArrayList<Integer>();
for (int i = 0; i < a.length; i++) {
l.add(a[i]);
}
mapNew.put(key, l);
}
//
List<String> result=new ArrayList<String>();
for(String key:set){
List li=mapNew.get(key);
for(int i=0;i<li.size();i++){
result.add(key+"-"+li.get(i));
}
}
for(String ss:result){
System.out.println(ss);
}
}
}
from table
order by substrb(id,1,instrb(id,'-')-1), to_number(substrb(id,instrb(id,'-')+1))
也谢谢liuyar 在数据规范的情况下确实很好用结贴给分!人人有份.