当前位置: 首页 > news >正文

选读SQL经典实例笔记20_Oracle语法示例

 

1. 计算一年有多少天

1.1.  sql

select 'Days in 2005: '||to_char(add_months(trunc(sysdate,'y'),12)-1,'DDD')as reportfrom dualunion allselect 'Days in 2004: '||to_char(add_months(trunc(to_date('01-SEP-2004'),'y'),12)-1,'DDD')from dual
REPORT
-----------------
Days in 2005: 365
Days in 2004: 366

2. 查找含有数字和字母的字符串

2.1. sql

with v as (
select 'ClassSummary' strings from dual union
select '3453430278'           from dual union
select 'findRow 55'           from dual union
select '1010 switch'          from dual union
select '333'                  from dual union
select 'threes'               from dual
)
select stringsfrom (
select strings,translate(strings,'abcdefghijklmnopqrstuvwxyz0123456789',rpad('#',26,'#')||rpad('*',10,'*')) translatedfrom v) xwhere instr(translated,'#') > 0and instr(translated,'*') > 0

3. 把整数转换成二进制

3.1. sql

ENAME        SAL SAL_BINARY
---------- ----- --------------------
SMITH        800 1100100000
ALLEN       1600 11001000000
WARD        1250 10011100010
JONES       2975 101110011111
MARTIN      1250 10011100010
BLAKE       2850 101100100010
CLARK       2450 100110010010
SCOTT       3000 101110111000
KING        5000 1001110001000
TURNER      1500 10111011100
ADAMS       1100 10001001100
JAMES        950 1110110110
FORD        3000 101110111000
MILLER      1300 10100010100

3.2. sql

select ename,sal,(select binfrom dualmodeldimension by ( 0 attr )measures ( sal num,cast(null as varchar2(30)) bin,'0123456789ABCDEF' hex)rules iterate (10000) until (num[0] <= 0) (bin[0] = substr(hex[cv()],mod(num[cv()],2)+1,1)||bin[cv()],num[0] = trunc(num[cv()]/2))) sal_binaryfrom emp

4. 标量子查询转换为复合子查询

4.1. sql

select e.deptno,e.ename,e.sal,(select d.dname,d.loc,sysdate todayfrom dept dwhere e.deptno=d.deptno)from emp e

4.2. SELECT列表里的子查询只允许返回一个值

4.3. sql

create type generic_objas object (val1 varchar2(10),val2 varchar2(10),val3 date
);

4.3.1. 对象类型

4.4.  sql

select x.deptno,x.ename,x.multival.val1 dname,x.multival.val2 loc,x.multival.val3 todayfrom (select e.deptno,e.ename,e.sal,(select generic_obj(d.dname,d.loc,sysdate+1)from dept dwhere e.deptno=d.deptno) multivalfrom emp e) x
DEPTNO ENAME      DNAME      LOC        TODAY
------ ---------- ---------- ---------- -----------20 SMITH      RESEARCH   DALLAS     12-SEP-200530 ALLEN      SALES      CHICAGO    12-SEP-200530 WARD       SALES      CHICAGO    12-SEP-200520 JONES      RESEARCH   DALLAS     12-SEP-200530 MARTIN     SALES      CHICAGO    12-SEP-200530 BLAKE      SALES      CHICAGO    12-SEP-200510 CLARK      ACCOUNTING NEW YORK   12-SEP-200520 SCOTT      RESEARCH   DALLAS     12-SEP-200510 KING       ACCOUNTING NEW YORK   12-SEP-200530 TURNER     SALES      CHICAGO    12-SEP-200520 ADAMS      RESEARCH   DALLAS     12-SEP-200530 JAMES      SALES      CHICAGO    12-SEP-200520 FORD       RESEARCH   DALLAS     12-SEP-200510 MILLER     ACCOUNTING NEW YORK   12-SEP-2005

4.5. 对象本身是一个标量值,它并不会违反标量子查询的规则

5. 解析串行化的数据

5.1. sql

 STRINGS
-----------------------------------
entry:stewiegriffin:lois:brian:
entry:moe::sizlack:
entry:petergriffin:meg:chris:
entry:willie:
entry:quagmire:mayorwest:cleveland:
entry:::flanders:
Entry:robo:tchi:ken:

5.1.1. sql

create view Vas
select 'entry:stewiegriffin:lois:brian:' stringsfrom dualunion all
select 'entry:moe::sizlack:'from dualunion all
select 'entry:petergriffin:meg:chris:'from dualunion all
select 'entry:willie:'from dualunion all
select 'entry:quagmire:mayorwest:cleveland:'from dualunion all
select 'entry:::flanders:'from dualunion all
select 'entry:robo:tchi:ken:'from dual

5.2. sql

 VAL1            VAL2            VAL3
--------------- --------------- ---------------
moe                         sizlack
petergriffin    meg         chris
quagmire        mayorwest   cleveland
robo            tchi        ken
stewiegriffin   lois        brian
willieflanders

5.2.1.  sql

with cartesian as (select level idfrom dualconnect by level <= 100)select max(decode(id,1,substr(strings,p1+1,p2-1))) val1,max(decode(id,2,substr(strings,p1+1,p2-1))) val2,max(decode(id,3,substr(strings,p1+1,p2-1))) val3from (select v.strings,c.id,instr(v.strings,':',1,c.id) p1,instr(v.strings,':',1,c.id+1)-instr(v.strings,':',1,c.id) p2from v, cartesian cwhere c.id <= (length(v.strings)-length(replace(v.strings,':')))-1)group by stringsorder by 1

6. 计算比重

6.1. Oracle支持内置函数RATIO_TO_REPORT

6.2. sql

select job,num_emps,sum(round(pct)) pct_of_all_salariesfrom (
select job,count(*)over(partition by job) num_emps,ratio_to_report(sal)over()*100 pctfrom emp)group by job,num_emps

7. 正则表达式功能

7.1. Oracle Database 10g

7.2. sql

select emp_id, textfrom employee_commentwhere regexp_like(text, '[0-9]{3}[-. ][0-9]{3}[-. ][0-9]{4}')and regexp_like(regexp_replace(text,'[0-9]{3}([-. ])[0-9]{3}\1[0-9]{4}',''),'[0-9]{3}[-. ][0-9]{3}[-. ][0-9]{4}')EMP_ID TEXT
---------- ----------------------------------------------------------7369 126 Varnum, Edmore MI 48829, 989 313-53517844 989-387.53599999 906-387-1698, 313-535.8886
http://www.lryc.cn/news/115806.html

相关文章:

  • JAVA细节/小技巧
  • jmeter如何压测和存储
  • 一个月学通Python(三十三):Python并发编程在爬虫中的应用
  • HCIP——STP
  • 【数据结构】“单链表”的练习题
  • 项目实战 — 消息队列(5){统一硬盘操作}
  • 【2.2】Java微服务:Hystrix的详解与使用
  • 【PYTHON】WebSocket服务端与客户端通信实现
  • Runloop 的五种mode
  • C++头文件使用精要
  • Flink之SideOutput(数据分流)
  • Android Studio新版本logcat过滤说明
  • carsim与matlab仿真
  • rust里如何快速实现一个LRU 本地缓存?
  • MQTT 订阅接收消息 mosquitto 方式
  • 以mod_jk方式整合apache与tomcat(动静分离)
  • springboot动态数据源切换
  • 代码随想录训练营day14
  • 功能测试进阶自动化测试如何摸清学习方向,少走弯路呢?
  • 检测前端是否可以ping通后端返回的ip地址
  • SMART司马他法则(目标管理)
  • 【LeetCode】删除并获得点数
  • SciencePub学术 | 传感器类重点SCIE征稿中
  • 移动端开发基础总结
  • 小X学游泳(深搜)
  • 分布式协议与算法——拜占庭将军问题
  • MySQL数据库管理的基本原则和技巧
  • SQL-每日一题【1193. 每月交易 I】
  • 探析青少年口才训练在个人发展中的重要性与影响
  • HTML 元素的 class 和 id 属性有何区别?