SQL排序,类似A-1,A-2,A-3,...A-10...

ming_303 2009-03-30 02:46:34
如题,要求SQL排序为A-1,A-2,A-3,...A-10... 而非A-1,A-10,...A-2,A-3...
-前字符排序,-后字符也排序
最好能写一SQL函数,代码实现亦可
...全文
208 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ming_303 2009-03-31
  • 打赏
  • 举报
回复
感谢valen_jia 如此不厌其烦帮忙写这么多代码
也谢谢liuyar 在数据规范的情况下确实很好用

结贴给分!人人有份.
liuyar 2009-03-30
  • 打赏
  • 举报
回复
假设这个字段为id

--oracle

select *
from table
order by substrb(id,1,instrb(id,'-')-1), to_number(substrb(id,instrb(id,'-')+1))
valen_jia 2009-03-30
  • 打赏
  • 举报
回复
又帮你写了个,你再试试
如果都按字符的话,就没办法了,我觉得,就用我第一次给你的好了
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);
}
}
}
ming_303 2009-03-30
  • 打赏
  • 举报
回复
额... sgdb 说的有理
-后按数字排序(汗,客户该不会在-后弄个字符什么来着,改天还得问问)
l00109503 2009-03-30
  • 打赏
  • 举报
回复
wo ding
sgdb 2009-03-30
  • 打赏
  • 举报
回复
-后字符也排序, 就应该是A-1,A-10,...A-2,A-3. 除非-后按数字来排
valen_jia 2009-03-30
  • 打赏
  • 举报
回复
恩?10我没想,我再给你写个,稍等
ming_303 2009-03-30
  • 打赏
  • 举报
回复
谢valen_jia
我想你并没有测试过,若再加句arr[7]="A-10",你就会发现它将这样排序:A-1,A-10,A-2,A-3,...B-3
与sql中直接order by filedname所得结果一样,横杠前要排序,横杠后也需要排序,最好是不限数字或字符(如:1-AA,中-A...)
valen_jia 2009-03-30
  • 打赏
  • 举报
回复
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);
}
}
}
  • 打赏
  • 举报
回复
个人感觉要用到通配符
帮你顶

81,076

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧