ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 3171|回复: 3

oracle 字段排序问题

[复制链接]
认证徽章
论坛徽章:
25
马上有对象
日期:2014-10-15 16:19:39马上有钱
日期:2015-02-04 16:47:05蓝锆石
日期:2015-02-04 13:42:24狮子座
日期:2015-08-04 13:50:48妮可·罗宾
日期:2017-01-12 15:58:38山治
日期:2017-04-24 12:31:25
跳转到指定楼层
1#
发表于 2017-12-15 12:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一个 oracle 字段排序问题(oracle 11G R2):

     如果字段是number,int,float 则按照大小排序,order by <column_name> asc | desc;
     如果是varchar,nvarchar,char和其它类型,则按照 order by nlssort(<column_name>, 'NLS_SORT=SCHINESE_PINYIN_M') asc | desc;
     问题:前台界面展示默认类型都是string,数据库也不知道前台哪个字段需要排序,如果现在让前台java做字段类型判断,类型可能会和数据库不一致,如100和99,char还是int和业务关系较大;前台做字段和类型映射,操作起来有点费劲。如果让数据库做判断的话,需要程序传 table_name 和 column_name,
select t.DATA_TYPE from user_tab_columns t where t.TABLE_NAME = ? and t.COLUMN_NAME = ?; 开发人员和框架原因导致字段别名很不规范,传参都未必能查出字段类型

     求一通用排序方法,非常感谢

认证徽章
论坛徽章:
25
马上有对象
日期:2014-10-15 16:19:39马上有钱
日期:2015-02-04 16:47:05蓝锆石
日期:2015-02-04 13:42:24狮子座
日期:2015-08-04 13:50:48妮可·罗宾
日期:2017-01-12 15:58:38山治
日期:2017-04-24 12:31:25
2#
发表于 2017-12-15 13:38 | 只看该作者
测试数据:

create table test_20171215 (
  id   number,
  code varchar2(10),
  name varchar2(20));

insert into test_20171215 (ID, CODE, NAME)
values (1, '100', '张三');
insert into test_20171215 (ID, CODE, NAME)
values (2, '99', '李四');
insert into test_20171215 (ID, CODE, NAME)
values (3, '4', '李博');
insert into test_20171215 (ID, CODE, NAME)
values (4, '1001', '张');

select * from test_20171215 order by id;
select * from test_20171215 order by nlssort(code, 'NLS_SORT=SCHINESE_PINYIN_M');
select * from test_20171215 order by nlssort(name, 'NLS_SORT=SCHINESE_PINYIN_M');

使用道具 举报

回复
论坛徽章:
486
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
3#
发表于 2017-12-15 23:50 | 只看该作者
如果SQL是从JAVA代码里面来的,那这个代码自然就可以知道列数据类型,从而加上适当的排序。
所以你就要从发出SQL的地方入手,要改就在这里改。

使用道具 举报

回复
认证徽章
论坛徽章:
25
马上有对象
日期:2014-10-15 16:19:39马上有钱
日期:2015-02-04 16:47:05蓝锆石
日期:2015-02-04 13:42:24狮子座
日期:2015-08-04 13:50:48妮可·罗宾
日期:2017-01-12 15:58:38山治
日期:2017-04-24 12:31:25
4#
发表于 2017-12-16 10:57 来自手机 | 只看该作者
newkid 发表于 2017-12-15 23:50
如果SQL是从JAVA代码里面来的,那这个代码自然就可以知道列数据类型,从而加上适当的排序。
所以你就要从 ...

谢谢,有大神答复就安心地调Java那边了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表