在我们实际开发过程当中我有时可能会遇到如下语句:
select ID,userName,userPassword from user where ID in('2','3','4','7','14');
我们想要的结果是:
ID userName userPassword
2 蒋峰 ****
3 李四 *
4 万物 ******
7 刘峰 ***
14 章程 ******
但是实际上得到的结果却可能是如下:
ID userName userPassword
14 章程 ******
2 蒋峰 ****
4 万物 ******
3 李四 *
7 刘峰 ***
所以我们要使in语句中的信息能按照我们传入的顺序显示就需要使用数据库中内置函数了:
java程序如下:
/**
* 获得自定义排序函数
* @param field 要排序的字段
* @param order 自定义顺序
* @return 返回经过处理的可以直接放在order by 后面的 Sql
* @throws DBException
*/
@Override
public String getOrderByFunction(String field, String order) throws DBException
{
if(Verify.isNullObject(field,order))
{//判断参数是否为空
return null;
}
String tempSql="";
String[]temp=order.split(",");
for(int i=0;i<temp.length;i++)
{
tempSql+="'"+temp[i]+"',"+(i+1)+",";
}
if(tempSql.endsWith(","))
{
tempSql=tempSql.substring(0, tempSql.length()-1);
tempSql="DECODE("+field+","+tempSql+")";
}
return tempSql;
}
经过处理以后我们重新生成的sql语句就是:
select ID,userName,userPassword from user where ID in('2','3','4','7','14') order by DECODE(ID,'2',1,'3',2,'4',3,'7',4,'14',5);
查询以后就能得到我们想要的结果:
ID userName userPassword
2 蒋峰 ****
3 李四 *
4 万物 ******
7 刘峰 ***
14 章程 ******