查看: 6559|回复: 23

【大话IT】请问数字和字符怎么分开排序

[复制链接]
论坛徽章:
9
2011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
发表于 2015-1-17 09:55 | 显示全部楼层 |阅读模式
SQL> select * from t1;

NOTE
--------------------------------------------------------------------------------
1
11
2
21
22
a
ab
abc

8 rows selected

这是数据记录,我希望按如下的排序,有什么办法??

NOTE
--------------------------------------------------------------------------------
1
2
11
21
22
a
ab
abc

论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
发表于 2015-1-17 10:05 来自手机 | 显示全部楼层
Order by

使用道具 举报

回复
论坛徽章:
9
2011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
 楼主| 发表于 2015-1-17 15:45 | 显示全部楼层
怎么order by ??

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
认证徽章
论坛徽章:
6348
ITPUB9周年纪念徽章
日期:2014-05-02 10:36:402011新春纪念徽章
日期:2014-12-29 12:11:142010广州亚运会纪念徽章:卡巴迪
日期:2014-08-06 08:44:252012新春纪念徽章
日期:2014-12-29 12:11:142013年新春福章
日期:2014-12-29 12:11:14马上有车
日期:2014-12-29 12:11:14马上有房
日期:2014-12-29 12:11:14马上有钱
日期:2014-12-29 12:11:14马上有对象
日期:2014-12-29 12:11:14马上加薪
日期:2014-12-29 12:11:14
发表于 2015-1-17 16:19 | 显示全部楼层
分开排序在合并吧...

使用道具 举报

回复
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-1-17 16:34 来自手机 | 显示全部楼层
把数字字符替换为空后整个为空的就是数字

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2015-1-17 17:10 来自手机 | 显示全部楼层

order by replace(translate(lower(notes), 'abcdefghijklmnopqrstuvwxyz', ' '), ' ', '') nulls last,
replace(translate(notes, '0123456789', ' '), ' ', '')  nulls last;

使用道具 举报

回复
论坛徽章:
27
双黄蛋
日期:2014-08-07 11:00:12红孩儿
日期:2015-01-09 11:06:52茶鸡蛋
日期:2015-01-09 11:14:31红宝石
日期:2015-02-03 10:25:36至尊黑钻
日期:2015-02-15 09:48:30至尊黑钻
日期:2015-02-15 09:49:11慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-10 08:55:43慢羊羊
日期:2015-04-22 15:14:26
发表于 2015-1-17 17:58 | 显示全部楼层
本帖最后由 DylanX 于 2015-1-17 18:03 编辑

  1. DROP TABLE t1;
  2. /
  3. CREATE TABLE t1(NAME VARCHAR2(20));
  4. /
  5. INSERT INTO t1 VALUES ('1');
  6. INSERT INTO t1 VALUES ('2');
  7. INSERT INTO t1 VALUES ('11');
  8. INSERT INTO t1 VALUES ('21');
  9. INSERT INTO t1 VALUES ('22');
  10. INSERT INTO t1 VALUES ('a');
  11. INSERT INTO t1 VALUES ('ab');
  12. INSERT INTO t1 VALUES ('abc');
  13. COMMIT;
  14. /

  15. SELECT NAME FROM t1 ORDER BY decode(trim(translate(name,'0123456789',' ')),null,to_number(name))
  16. /
复制代码

使用道具 举报

回复
论坛徽章:
27
双黄蛋
日期:2014-08-07 11:00:12红孩儿
日期:2015-01-09 11:06:52茶鸡蛋
日期:2015-01-09 11:14:31红宝石
日期:2015-02-03 10:25:36至尊黑钻
日期:2015-02-15 09:48:30至尊黑钻
日期:2015-02-15 09:49:11慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-10 08:55:43慢羊羊
日期:2015-04-22 15:14:26
发表于 2015-1-17 18:00 | 显示全部楼层
NAME
--------------------
1
2
11
21
22
a
ab
abc

使用道具 举报

回复
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-1-18 00:50 | 显示全部楼层
DylanX 发表于 2015-1-17 17:58

没有处理非数字字符串的情况
SQL> CREATE TABLE t1(NAME VARCHAR2(20));

表已创建。

SQL> /
CREATE TABLE t1(NAME VARCHAR2(20))
             *
第 1 行出现错误:
ORA-00955: 名称已由现有对象使用


SQL> INSERT INTO t1 VALUES ('1');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('2');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('11');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('21');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('22');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('abc');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('ab');

已创建 1 行。

SQL> INSERT INTO t1 VALUES ('a');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> /

提交完成。

SQL>
SQL> SELECT NAME FROM t1 ORDER BY decode(trim(translate(name,'0123456789',' ')),
null,to_number(name))
  2  /

NAME
----------------------------------------
1
2
11
21
22
abc
ab
a

已选择8行。

使用道具 举报

回复
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-1-18 00:51 | 显示全部楼层
〇〇 发表于 2015-1-18 00:50
没有处理非数字字符串的情况
SQL> CREATE TABLE t1(NAME VARCHAR2(20));

直接把字符和数字混合会出错
SQL> SELECT NAME FROM t1 ORDER BY decode(trim(translate(name,'0123456789',' ')),
null,to_number(name),name)
  2  /
SELECT NAME FROM t1 ORDER BY decode(trim(translate(name,'0123456789',' ')),null,
to_number(name),name)
       *
第 1 行出现错误:
ORA-01722: 无效数字


使用道具 举报

回复

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

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


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