查看: 4030|回复: 3

oracle 字段排序问题

[复制链接]
认证徽章
论坛徽章:
25
马上有对象
日期:2014-10-15 16:19:39蓝锆石
日期:2015-02-04 13:42:24马上有钱
日期:2015-02-04 16:47:05狮子座
日期:2015-08-04 13:50:48妮可·罗宾
日期:2017-01-12 15:58:38山治
日期:2017-04-24 12:31:25
发表于 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 13:42:24马上有钱
日期:2015-02-04 16:47:05狮子座
日期:2015-08-04 13:50:48妮可·罗宾
日期:2017-01-12 15:58:38山治
日期:2017-04-24 12:31:25
发表于 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');

使用道具 举报

回复
论坛徽章:
530
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2017-12-15 23:50 | 显示全部楼层
如果SQL是从JAVA代码里面来的,那这个代码自然就可以知道列数据类型,从而加上适当的排序。
所以你就要从发出SQL的地方入手,要改就在这里改。

使用道具 举报

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

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

使用道具 举报

回复

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

本版积分规则 发表回复

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