Oracle特殊数据查询技术


实验内容:

一、日期型数据的操作

– 日期型数据的查询显示

– 不同语言环境下日期型数据查询结果的差异

– SESSION 每建立一个连接connection会创建一个session会话

– 自由控制日期型数据的显示格式的方法

set linesize 160;
set pagesize 22;

prompt 显示日期变量

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select hiredate from emp;

显示自己定义的日期格式

select to_char(hiredate,'yyyy-mm-dd hh24:mi:ss day') from emp;

这里写图片描述

显示某个日期是星期几,从dual(虚拟表当中查询)

select to_char(to_date('2017-04-01','yyyy-mm-dd'),'day') from dual;

查询2017年4月1日:
这里写图片描述

–dual是oracle的一个虚拟表,可以用于任何查询
–for example

select 500*20 from dual;

这里写图片描述
prompt 显示某个日期是一个星期的第几天

select to_char(to_date('2017-04-01','yyyy-mm-dd'),'d') from dual;

这里写图片描述
prompt 显示某个日期是哪个时区

select to_char(to_date('2017-04-01','yyyy-mm-dd'),'rrrr-RM') from dual;

这里写图片描述

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values(
1000,
'TANG',
'TEACHER',
null,
'01-9月-96',/*1996-09-01不能加入数据库,应该按照数据库的格式加入*/
5000,
null,
40);

这里写图片描述

select to_char(hiredate,'yyyy') from emp where empno<1005;

这里写图片描述
利用add_months显示某个日期加上多少个月后的日期

select to_char(add_months(to_date('2015-01-29','yyyy-mm-dd'),1),'yyyy-mm-dd')from dual;

这里写图片描述
查询两个时间的中间有多少天数

select (to_date('2015-01-29','yyyy-mm-dd')-to_date('2016-01-29','yyyy-mm-dd')) from dual;

这里写图片描述

二、层次查询技术

深度遍历的层次查询

set feedback off;
select empno,ename,mgr
from emp;
column ename format a20;

这里写图片描述

-- select fieldName
-- from tableName
-- start with rootCondition
-- connect by prior fieldname  =  fieldName
select empno, ename,mgr
from emp
start with empno=7839
connect by prior empno = mgr;

这里写图片描述

select empno,ename,mgr,level
from emp
start with empno=7839
connect by prior empno = mgr;
order by level;

这里写图片描述

层次显示

select empno,(lpad(' ',(level-1)*2)||ename) as ename, mgr, level
from emp
start with empno=7839
connect by prior empno = mgr;
order by level;

这里写图片描述

上级节点的字段 当前节点的字段

广度遍历的层次查询

形成环路的层次查询

不再成为一棵树或森林了trees 图 graph net

三、情景查询与翻译查询技术

情景查询

decode(fieldName,orgValue,newValue)
select empno,ename,decode(deptno,10,'财务部',20,'研发中心','其他部门') decode
from emp;

这里写图片描述

select empno,ename,deptno,case
    when deptno = 10 then '财务部'
    when deptno >11 and deptno < 21 then '研发中心'
    when deptno > 21 then '其他部门'
    end 部门名称
from emp;

这里写图片描述

翻译查询

translate(fieldName,beforeValue,afterValue)
SELECT empno,ename,decode(deptno,null,'未知')
FROM EMP
select translate(123.69,12345678,6901482735) transNum
from dual;
update emp set sal=translate(1500.9,1234567890,6912035487) where empno=7;

加密

select 123.789,translate(123.789,1234567890,5432109876) encryte from dual;

这里写图片描述

解密

select 543.789,translate(543.987,5432109876,1234567890) decryt from dual;

这里写图片描述

insert into emp values(100.,'tang',null,null,null,translate(98765,1234567890,0123456789))

四、存储的数据类型

数值型

int float   number(6,2)

字符型

 char    varchar   nchar  nvarchar   (varchar2)

日期型

datetime  date  timestamp

字符型

to_char(value,formatString)  将数值转换成指定格式的字符串   0 9 , .
to_date(string,formatStirng  将字符串按指定格式转换成日期型数据
NLS native language system
alter session set nls_language='%s' AMERICAN/SIMPLIFIED CHINESS

声明:May丶乘剑的部落小阁|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Oracle特殊数据查询技术


一个偶尔努力、偶尔懈怠的"搬砖"人