如题,要求SQL排序为A-1,A-2,A-3,...A-10... 而非A-1,A-10,...A-2,A-3...
-前字符排序,-后字符也排序
最好能写一SQL函数,代码实现亦可

解决方案 »

  1.   

    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);
    }
    }
    }
      

  2.   

    谢valen_jia 
    我想你并没有测试过,若再加句arr[7]="A-10",你就会发现它将这样排序:A-1,A-10,A-2,A-3,...B-3
    与sql中直接order by filedname所得结果一样,横杠前要排序,横杠后也需要排序,最好是不限数字或字符(如:1-AA,中-A...)
      

  3.   

    -后字符也排序, 就应该是A-1,A-10,...A-2,A-3. 除非-后按数字来排
      

  4.   

    额... sgdb 说的有理
    -后按数字排序(汗,客户该不会在-后弄个字符什么来着,改天还得问问)
      

  5.   

    又帮你写了个,你再试试
    如果都按字符的话,就没办法了,我觉得,就用我第一次给你的好了
    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);
    }
    }
    }
      

  6.   

    假设这个字段为id--oracleselect * 
    from table 
    order by substrb(id,1,instrb(id,'-')-1), to_number(substrb(id,instrb(id,'-')+1))
      

  7.   

    感谢valen_jia 如此不厌其烦帮忙写这么多代码
    也谢谢liuyar 在数据规范的情况下确实很好用结贴给分!人人有份.