强大的SQL之SQL Cookbook读书笔记1——对字母数字混合的数据排序
来源:互联网 发布:淘宝网男士背心 编辑:程序博客网 时间:2024/05/17 08:37
最近,在看SQL Cookbook真的很不错的一本书,许多解决方案,都十分精妙,真切的体会到了,SQL的强大。
注:我用的是ORACLE 11g
下面是书2.4中的一个实例--对字母数字混合的数据序列的排序
首先,我们需要书中的一张表emp,书中没有提供建表的文件或者是语句。我用的是ORACLE数据库,按照书上的数据自己建的emp表,随便建一个表,然后把数据存起来,下面是数据插入的SQL,你们有福啦,就不要一条条输入了,PS:本来想上传emp表的dump文件的,可是上传限制。
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7369, 'SMITH', 'CLERK', 7902, '17-DEC-1980', 800, null, 20);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-1981', 1600, 300, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, '20-FEB-1981', 1250, 500, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, '02-APR-1981', 2975, null, 20);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, '28-SEP-1981', 1250, 1400, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, '01-MAY-1981', 2850, null, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, '09-JUN-1981', 2450, null, 10);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, null, 20);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, '17-NOV-1981', 5000, null, 10);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, '08-SEP-1981', 1500, 0, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7876, 'ADAMS', 'CLERK', 7788, '12-JAN-1983', 1100, null, 20);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, '03-DEC-1981', 950, null, 30);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566, '03-DEC-1981', 3000, null, 20);insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, '23-JAN-1982', 1300, null, 10);
建好表,插好数据,然后,建一个视图,语句如下,
CREATE VIEW vASSELECT ename||' '||deptno AS DATAFROM emp
接着,就是要通过建立的视图v里面的字母或者数字,排序查询结果,如何做呢?
1. 分离出数字,通过数字(DEPTNO)排序查询结果,经ORACLE数据库验证,可行,SQL如下:
SELECT DATA FROM V ORDER BY REPLACE(DATA, REPLACE(TRANSLATE(DATA, '0123456789', '##########'), '#', ''), '');
2. 分离出字母,通过字母(ENAME)排序查询结果,经ORACLE数据库验证,可行,SQL如下:
SELECT DATA FROM V ORDER BY REPLACE(TRANSLATE(DATA, '0123456789', '##########'), '#', '');
我看的时候,就感觉分离出来的字母,后面多一个空格,于是看到了书中的分离视图(VIEW)的查询语句,证实,我的想法是正确的,查询语句如下SELECT DATA, REPLACE(DATA, REPLACE(TRANSLATE(DATA, '0123456789', '##########'), '#', ''), '') NUMS, REPLACE(TRANSLATE(DATA, '0123456789', '##########'), '#', '') CHARS FROM V;
把分离查询出来的字段CHARS中的值拷贝,粘贴出来,确实后面多个空格。SQL,如此强大,学到了,哈哈。
- 强大的SQL之SQL Cookbook读书笔记1——对字母数字混合的数据排序
- 对字母数字混合的数据排序
- ORACLE对字母和数字混合的数据排序
- COOKBOOK 14.6 搜索字母数字混合的字符串
- SQL Cookbook—数字、日期
- SQL Cookbook—查询、排序
- 【SQL】对混合数据进行排序
- SQL 排序 . 有字母和数字的先按字母后按数字
- SQL窗口函数——SQL Cookbook读书笔记之一
- 数字字母混合排序
- 快速导入EXCEL到SQL的SQL语句,此方法可以解决数字字母混合的问题
- ORDER BY子句的妙用(SQL Cookbook 读书笔记)
- oracle-字母数字混合排序
- 字母 数字 中文 混合排序
- oracle 字母数字混合排序
- mysql字母数字混合排序
- DB2导出del文件的sql、别名为数字和字母的处理、结果数据替换
- 对数组里的字典进行数字字母排序
- structs Bean标记(接收页面传参很有用得!)
- Oracle递归查询示例分析
- 利用addr2line命令翻译二进制的线性地址到源代码文件的行号
- 同学们都瞅着找工作么?
- 英雄就下100层是一款经典的手机小游戏
- 强大的SQL之SQL Cookbook读书笔记1——对字母数字混合的数据排序
- HDU1870:愚人节的礼物
- 《代码大全》学习笔记(7):高级结构设计
- 项目二之2
- Oracle中TO_DATE格式
- ARM 汇编介绍
- 知识扫盲
- java选择法排序笔记
- windows下 cocos2d-x Cygwin + NDK配置