oracle排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:11:32
现在我这里是根据表里的字段lastname进行排序,而且是跟据upper(lastname)进行的排序,现在要做成A,a,B,b……这样的排序我该怎么去实现呀
我现在要做的是先按字母顺序排,再从第一个字母的大小写排,根据一楼和二楼的方法会产生ab,AC,ad这种效果,我想要的是AC,ab,ad,B,b,C……我的sql语句select * from (select rownum as rn,(select count(rownum) from fsgrout.contact con left join person p on con.ownerid = p.id where con.deletestatus=0 and ownerid=16148) as count,con.* from (select con.*,p.id, p.firstname || ' ' || p.lastname person_name from fsgrout.contact con left join person p on con.ownerid = p.id where con.deletestatus=0 and ownerid=16148 order by upper(con.lastname)) con) where rn>30 and rn<=45 没办法老外的需求总是很古怪,处理起来能那么简单就好了,最后加ORDER BY无法实现,我现在是想一开始用upper的思路就不大对头,但就是没想到怎么解决
2.ORDER BY upper(substr(lastname,1,1)), substr(lastname,1,1),upper(substr(lastname,2,1)), substr(lastname,2,1).......?大哥我这字符串类型的如果是varchar(200)怎么办呀,而且如果有的数据只有2位那怎么办,大哥想想办法给你加分哦

我试过了,直接按lastname排序即可。可以得到你想要的AC,ab,ad顺序。
你执行这个测试一下就知道了。

select * from fsgrout.contact con order by con.lastname

你的业务逻辑很有意思,不过答案很简单啊,在你的sql语句最后再加一个order by 子句的结果对不对?

order by substr(lastname,1,1)

你的提的问题和你补充的一不样啊
不明白你要的是怎么的.
1.ORDER BY upper(substr(lastname,1,1)), lastname
2.ORDER BY upper(substr(lastname,1,1)), substr(lastname,1,1),upper(substr(lastname,2,1)), substr(lastname,2,1).......?

substr和upper都不需要
直接order by lastname就可以了