Oracle数据库学习资料课件_第1页
Oracle数据库学习资料课件_第2页
Oracle数据库学习资料课件_第3页
Oracle数据库学习资料课件_第4页
Oracle数据库学习资料课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle数据库学习资料课件

•Oracle公司(甲骨文)创始人:LarryEllison32岁,公司提供数据库服务.

•公司成立于1977年,83年公司更名为Oracle,原名为“软件开发实验室”.

•Oracle数据库适用于大型企业

,竞争对手

-微软的SQLServer

-IBM的DB2

•目前的版本

-2.0-7.0,8.0,8i,9i,10g

Oracle的服务:

我的电脑右键选择治理一服务和应用程序一服务

Orac1eServer<ORACLE_SID>数据库服务,进程为ORACLE.exe

Oracle<HOME„NAME>TNSListener监听器服务,进程TNSLSNR.exe默认端口1521、1526

Orac1eDBConsole<ORACLE_SID>对应用于OEM

Oracle<HOME_NAME>iSQL*Plus关于于iSQL*Plus

<ORACLE_SID>——是数据库或例程的系统标识符

<H0ME_NAME>是Oracle主名目名称

这几个服务之间的关系:

启动顺序:1、Oracle<HOME_NAME〉TNSListener必须启动

2、OracleServer<ORACLE_SID>必须启动

3,OracleDBConsole<ORACLESID>启动依靠于OracleServerVORACLESID>

SqIPIus

SqlPlus是Oracle任何版本都自带的数据库操作工具,使用它能够完成大部分的数据库

操作。

SqlPlus能够''开始-程序玲Oracle"启动,也能够命令行启动(互动)

1.命令行启动sqlPlus

sqlplus用户名/密码@orcl

sqlplus用户名@orcl

假如用户是治理员要在sqlplus用户名/密码@主机字符串assysdba

是用户名和密码分隔符号

、'@"是密码和数据库的分隔符号

、'orcl"是数据库的名称,在安装时指定

爰OracleSQL*Plus目回区|

文件鱼)编辑豆)搜索⑤)选项帮助但)

A

SQL*Plus:Release10.2.0.1.0-Productionon星期一5月1110:06:252009

Copyright(c)1982»2005,Oracle.Allrightsreserved.

连接到:

OracleDatabase1OgEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,OLAPandDataMiningoptions

SQL>showuser;

USER为"SVS"

SQL>disc

从OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,OLAPandDataMiningoptions断开

SQL>showuser

USER为

SQL>connscott/tiger@oracle

已连接。

SQL>showuser;

USER为-SCOTT"

SQL>V

<

常用命令(互动)

connect切换用户

showuser显示当前用户

setlinesize1000设置行显示长度

setpagesize1000设置分页长度

descdept查看表结构

selecttable_namefromuser_tables

查询当前用户的表

/运行上一条SQL语句

clearscreen清除屏幕

edit编辑

spoold:/a储存输出结果到某个位置

spooloff储存终止

quit退出

list查看最后一条语句

@文件名.sql运行外部文件中的SQL语句

Sql*plus的常用命令

是一个oracle提供的工具,使用此工具能够完成数据库的操作和治理。

SQL*Plus有两种工作方式:

1、基于图形界面的sqlplusw

2、基于命令行的sqlplus

Sql*plus中能够执行3种类型的命令:

1、SQL语句

SELECT*FROMtab;

2、PL/SQL语句

CREATETABLEtest(xnumber,infovarchar(20));

Commit;

编写一个储备过程,向test表中插入20条记录。

DECLARE

xnumber:=10;

BEGIN

FORIIN1..20LOOP

INSERTINTOtestVALUES(x,'测试数据’);

x=x+i;

ENDLOOP;

END;

3、SQL*Plus内部命令

这些命令用于设置SQL*Plus的环境或格式化输出结果。

例如:改变EMP表里SAL列的输出格式

COLUMNSALFORMAT$99,99HEADING'薪水';

使用SQL*Plus能够执行操作系统本身的命令:

例如:在windows下的记事本notepad,exe

HOSTnotepad.exe;

退出SQL*Plus返回操作系统:

EXIT(QUIT)

关心提示:

HELPSET;

HELP@;

HELPED;

清除屏幕:

CLEARSRC;

SQL*PIus编辑命令

命令缩写作用

APPENDtextAtext将text加到当前行末端

CHANGE/old/newC/old/new将当前行中的old改为new

CHANGE/textC/text从当前行中删除text

CLEARBUFFERCLBUFF清除全部行

DEL删除当前行

INPUTI加入一行或多行

INPUTtextItext加入由text组成的行

LISTL列出缓冲区中的全部行

LISTnLn或n列出n行

LISTlastLlast列出最后一行

LISTmnLmn列出m到n行

运行缓冲区的命令:

RUN或/

储存缓冲区中的内容为.sql文件:

SAVEf:test;

编辑或者读取命令文件.sql:

EDIT文件名;

在SQL文件中的注释有3种方法:

使用SQL*Plus的REMARK命令;

使用SQL注释分界符/**/

使用ANSI/SQL的、'一"型注释

读取命令文件在SQL*PLUS中:

GETf:\test.sql;

运行.sql文件中的指令:

5丁人用或@,@使用更多

建议:尽量使用记事本编写代码,如此有利于修改

所需要的表

在所有的讲解中所要使用到的表全部差不多上scott用户下的表,因此必须了解在此用户下有

那几张表,以及每张表的作用是什么。

土OracleSQL»Plus□0B

文件9编辑©搜索⑤)选项(Q)帮助Of)

OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-ProductA

WiththePartitioning,OLAPandDataMiningoptions

SQL>showuser

USER为"SCOTT"

SQL>select*fromtab;

TNAMETABTVPECLUSTERID

DEPTTABLE

EMPTABLE

BONUSTABLE

SALGRADETABLE

SQL>descdept;

名称是否为空?类型

DEPTNONOTNULLNUMBER(2)

DNAMEUARCHAR2(14)

LOCUARCHAR2(13)

SQL>V

<

幸免显现汉字,因为实际开发中容易显现乱码问题。

雇员表[empJ

F

*OracleSQL*PlusIki回凶

文件g编辑⑥搜索⑤)选项Q)帮助国)

SQL>descemp;人

名称是否为空?类型

EMPNONOTNULLNUMBER(4)

ENAMEUARCHAR2(10)

JOBUARCHAR2(9)

MGRNUMBER(4)

HIREDATEDATE

SALNUMBER(7,2)

COMMNUMBER(7,2)

DEPTNONUMBER(2)

SQL>V

<j图.

雇员表中记录的是一个个的雇员的差不多信息。

雇员表(EMP)

No.字段类型描述

1EMPNONUMBER(4)表示雇员编号,是唯独编号

2ENAMEVARCHAR2(10)表不雇员姓名

3JOBVARCHAR2(9)表示工作职位

4MGRNUMBER(4)表示一个雇员的领导编号

5HIREDATEDATE表示雇佣日期

6SALNUMBER。,2)表示月薪,工资

7COMMNUMBER(7,2)表示奖金,或者称为佣金

8DEPTNONUMBER(2)部门编号

部门表〔dept〕

r

±OracleSQL*PlustJ回凶

文件g编辑©搜索⑤)选项Q)帮助的

SQL>descdept;A

名称是否为空?类型

DEPTNONOTNULLNUMBER(2)

DNAMEUARCHAR2(14)

LOCUARCHAR2(13)

SQL>descemp;V

<j>

表示一个个具体的部门信息部门表(dept)

No.字段类型描述

IDEPTNONUMBER(2)部门编号,是唯独编号

2DNAMEVARCHAR2(l4)部门名称

3LOCVARCHAR2(l3)部门位置

工资等级表〔SALGRADE〕

土OracleSQL»Plus

文件电)编辑更)搜索⑤)选项©)帮助国)

SQL>descsalgrade;

名称是否为空?类型

GRADENUMBER

LOSALNUMBER

HISALNUMBER

SQL>select*fromsalgrade;v

<Ml>£

一个公司工资是有等级制度,那么用此表表示一个工资的等级

工资等级表(SALGRADE)

No.字段类型描述

1GRADENUMBER等级名称

2LOSALNUMBER此等级的最低工资

3HISALNUMBER此等级的被高工资

奖金表〔BONUS〕

AOracleSQL*PlustJ回区

文件g编辑②搜索⑤)选项©)帮助㈤

SQL>descbonus;A

名称是否为空?类型

ENAMEUARCHAR2(10)

JOBUARCHAR2(9)

SALNUMBER

COMMNUMBER

SQL>|

V

<>

表示的是一个雇员的工资及奖金

奖金表〔BONUS)

No.字段类型描述

IENAMEVARCHAR2(lO)雇员姓名

2JOBVARCHAR2(9)雇职员作

3SALNUMBER雇职员资

4COMMNUMBER雇员奖金(佣金)

范例:查询每月能够得到奖金的雇员信息

,奖金是comm字段

•只要字段中存在内容,那么表示此内容不为空[null),假如存在内容,那么会显示具

体的值。

•不为空的表示:字段ISNOTNULL

SELECT*FROMempWHEREcommISNOTNULL;

范例:查询没有奖金的雇员

•没有奖金那么comm字段的内容确信是null,格式:字段ISNULL

SELECT*FROMenipWHEREcommISNULL;

范例:要求查询出,差不多工资大于1500,同时能够领取奖金的雇员信息。

•现在应该是两个条件,而且两个条件必须同时满足

•既然要求两个条件全部满足,那么必须使用AND操作符进行条件的连接。

SELECT*FROMempWHEREsal>1500ANDcommISNOTNULL;

同时指定了两个条件,两个条件必须同时满足才能够查询出结果。

范例:要求查询出,差不多工资大于1500,或者能够领取奖金的雇员信息。

•假如要表现出或者的概念使用OR进行连接,表示两个条件有一个满足即可。

SELECT*FROMempWHEREsal>1500ORcommISNOTNULL;

之前使用NOT能够取反,把确实条件变为假的,假的变为确实。

范例:要求查询出,差不多工资不大于1500,同时不能够领取奖金的雇员信息。

•现在相当因此整体的条件取反。

SELECT*FROMempWHERENOT(sal>1500ORcommISNOTNULL);

等价于

SELECT*FROMempWHEREsal<=1500andcommisnull;

从程序中能够发觉,通过括号表示一组的条件。

范例:查询差不多工资大于1500,然而小于3000的全部雇员信息。

•满足两个:sal>1500,sal<3000

SELECT*FROMempWHEREsal>1500ANDsal<3000;

在SQL语法中,提供了一个专门的指定范畴查询的过滤语句:BETWEEN…AND…

语法格式:

字段BETWEEN最小值AND最大值

例:使用BETWEEN…AND修改之前的操作

SELECT*FROMempWHEREsalBETWEEN1500AND3000;

实际上BETWEEN...AND操作等价:sal>=1500ANDsal<=3000,包含了等于的功能。

范例:查询出在1981年雇佣的全部雇员信息

•1981年1月1日~1981年12月31日之间雇佣的雇员

•日期表示的时候要加

SELECT*FROMemp

WHEREhiredateBETWEEN'IT月-81'AND'31T2月-81';

结论:BETWEEN…AND查询除了能够支持数字之外,也能够支持日期的查询

•随着深入的学习会发觉,日期实际上也是以数字的形式表示出来。

范例:要求查询出姓名是smith的雇员信息

,现在告诉了要查询的名字,条件:ename='smith'

SELECT*FROMempWHEREename='smith,;

执行以上的查询语句之后,并可不能返回查询结果,再次查询数据库表的信息,发觉smith

是采纳大写的形式表示的,在Oracle中是对大小写敏锐的,因此现在在查询的时候必须以大

写的形式进行条件的编写。代码修改如下:

SELECT*FROMempWHEREename='SMITH,;

范例:要求查询出雇员编号是7369、7499、7521的雇员的具体信息

•假如现在按照之前的做法,那么设置条件要使用OR连接:

cmpno=7369ORcmpno=7499ORempno=752l

SELECT*FROMemp

WHEREcmpno=7369ORempno=7499ORcmpno=7521;

实际上,现在是指定了查询的范畴,那么既然有范畴了在SQL语法中就能够使用IN操作符完

成。

语法格式:

字段IN(值1,值2,值n)

假如现在要求查询的内容不在此范畴之中,那么能够使用NOTIN,语法如下:

字段NOTIN(值1,值2,..值n)

范例:使用以上的格式进行修改

SELECT*FROMemp

WHEREempnoIN(7369,7499,7521);

范例:要求查询出雇员编号不是7369、7499、7521的雇员的具体信息一

SELECT*FROMemp

WHEREempnoNOTIN(7369,7499,7521);

另外,需要说明的是,使用IN操作符不光能够用在数字上,也能够用在字符串的信息上。

范例:要求查询出姓名是SMITH、ALLEN、KING的雇员信息

SELECT*FROMemp

WHEREenameIN('SMITH'.'ALLEN'/KING');

提示:

假如在指定的查询范畴中指定了额外的内容,那么不阻碍程序运行。

SELECT*FROMemp

WHEREenameIN('SMITH','ALLEN','KING','$#VC');

在一样的日常见到的站点中经常发觉有模糊查找功能,即:输入一个指定的关键字,把符合

的内容全部查询出来,在SQL中使用LIKE语句完成。

在使用LIKE语句的时候要注意通配符的问题,在LIKE语句中要紧使用以下两种通配符:

•、、%":能够匹配任意长度的内容

•:能够匹配一个长度的内容

范例:查询出所有雇员姓名中第二个字母包含"M"的雇员信息

SELECT*FROMemp

WHEREenameLIKE'_M%';

范例:查询出雇员姓名中包含字母M的雇员信直

•现在,表示能够在任意的位置上显现字母M

SELECT*FROMempWHEREenameLIKE'%M%';

然而,要提醒大伙儿的是:''假如在使用LIKE的时候没有指定查询的关键字,那么表示查

询全部"

SELECT*FROMemp

WHEREenameLIKE'%%';

使用LIKE还能够方便的进行日期的查找功能。

范例:要求查询出在1981年雇佣的雇员信息

SELECT*FROMemp

WHEREhiredateLIKE'%81%';

范例:查询工资中包含6的雇员信息

SELECT*FROMemp

WHEREsalLIKE'%6%';

在操作条件中还能够使用:>、>=、=、<、<=等运算符号

不等于符号:在SQL中假如要想使用不等于符号,能够有两种形式:、'<>''、"!="

范例:查询雇员编号不是7369的雇员信息

•使用'、<>”完成

SELECT*FROMempWHEREempno<>7369;

•使用''!=〃竟最一

SELECT*FROMempWHEREcmpno!=7369;

对结果进行排序(ORDERBY子句)(重点)

在SQL中能够使用ORDERBY子句对查询的结果进行排序,例如,现在使用查询全部的语句:

SELECT*FROMemp;

现在,从查询结果能够发觉,是按照雇员的编号进行排序的,那么现在假如要对使用指定的

列进行排序,那么就必须使用ORDERBY语句,语法格式如下:

SELECT(DISTINCT)*|具体的列别名

FROM表名称

{WHERE条件(s)}

{ORDERBY排序的字段1,排序的字段2ASC|DESC}

ASC表示升序、DESC表示降序

范例:要求按照工资由低到高排序

SELECT*FROMempORDERBYsal;

之前是按照由低到高的顺序完成,是采纳的升序的形式,现在要求使用降序的形式完成。实

际上假如在排序的时候没有指定排序规那么,那么默认的排序规那么是升序排列。

SELECT*FROMempORDERBYsalASC;

要想使用降序的方式完成,那么使用DESC即可「

SELECT*FROMempORDERBYsalDESC;

r

±OracleSQL*Plus(kJ回凶

文件9蝙辑©搜索⑤选项⑥)帮助国)

SQL>select*FromempA

2orderbysaldesc;

EMPNOENAMEJOBMGRHIREDATESAL

7839KINGPRESIDENT17-11月-815000

7902FORDANALYST756603-12月-813000

7788SCOTTANALYST756619-4月-873000

7566JONESMANAGER7839G2-4月-812975

7698BLAKEMANAGER7839G1-5月-812850

7782CLARKMANAGER7839@9-6月-812450

7499ALLENSALESMAN769820-2月-811600

7844TURNERSALESMAN769808-9月-811500

7934MILLERCLERK778223-1月-821300

7521WARDSALESMAN769822-2月-811250

7654MARTINSALESMAN769828-9月-811250

7876ADAMSCLERK778823-5月-871100

7900JAMESCLERK7698@3-12月-81950

7369SMITHCLERK790217-12月-80800

已选择1哧。

V

<

范例:要求查询出10部门的所有雇员信息,查询的信息按照工资由高到低排序,假如工资相

等,那么按照雇佣日期由早到晚排序。

•现在存在两个排序条件,第一个是降序,第二个升序

SELECT*FROMemp

WHEREdcptno=10ORDERBYsalDESC.hircdatcASC;

排序的操作确信是放在整个SQL语句的最后执行。

单行函数(重点)

数据库系统中,每个数据库之间唯独不同的最大区别点就在与函数的支持上,使用函数能够

完成一系列的操作功能。

单行函数语法:

function_namc(column|cxprcssion,[arg1,arg2,...])

参数说明:

•function_namc:函数名称

•column:数据库列名

,expression:字符串或运算表达式

•argl,arg2:在函数中使用参数

单行函数分类:

•字符函数:同意字符输入同时返回字符或数值

•数值函数:同意数值输入并返回数值

•日期函数:对日期型数据进行操作

•转换函数:从一种数据类型转换为另一种数据类型

•通用函数:NVL函数、DECODE函数

字符函数

Oracle中的dual表

Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select

语句块中,用来构成select的语法规那么,oracle保证dual里面永久只有一条记录。这是因

为ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.因此这写

内部操作是不可见的.

以下是dual的一些使用方法:

1、查看当前用户,能够在SQLPlus中执行下面语句

selectuserfromdual;

2、用来调用系统函数

selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss*)fromdual;--获得当前系统时刻

selectSYS_CONTEXT('USERENV','TERMINAL')fromdual;--获得主机名

selectSYS-CONTEXTCUSERENVManguage')fromdual;--获得当前locale

selectdbms_random.randomfromdual;--获得一个随机数

3、能够用做运算器

select7*9fromdual;

1.AClI(x)返回字符x的ASCII码

selectascii('a')fromdual;

2.求ACSII(H),ASCIICA"),ASCn(t0)),ASCII('XYZ)'的值

3.CHR(X)返回ASCII码为X的字符

4.CONCAT(x,y)字符串拼接函数

selectconcat(concat(ename,'isa'),job)fromemp;

5.INITCAP(x)首字母大写

selectinitcap(ename)fromemp;

6.INSTR(x,y[,n][,m])确定y在x中的位置。n是起始查找的位置,m第几次显现的位置。

selectinstr('HelloWorld2)fromdual;

selectinstr('HelloWorld!,,,l,,2,3)fromdual;

7.LENGTH(x)字符串长度

selectename,length(ename)fromempwhereempno=7698;

8.LOWER(x)转换小写

selectlower(ename)fromcmp;

9.UPPER(x)转换大写

10.LPAD(x,n[,y])在字符串x的左边补充字符串y,得到总长为n个字符的字符串。可选参

数y用于指定在x左边补充的字符串;省略参数y,默认值为空串。

selectlpad(ename,15,'$#(§)')fromemp:

11.RPAD(x,n[,y])

selectrpad(ename,15,'@#$')fromemp;

12.LTRIM(x[,y])从字符串x的左边截去包含在字符串y中的字符。假如不指定参数y,那

么默认截去空格。

selectItrimCabcdab'/a1)fromdual;

13.RTIME(x[,y])

14.trim(x)去除左右空格

15.SUNSTR(x,n[,m])返回字符串x中的一个子串,那个子串从字符串x的第n字符开始,

截取参数m个字符。

selectsubstr('abcsdfsdwf^',3,4)fromdual;

16.replace(x,y,z)将字符串x中所具有的子串y用子串z替换

selectreplace('jackandjue'J\'br)fromdual;

19.TRANSLATE(string,if,then)依照"if"中字符的位置,并检查"then"的相同位置,然

后用该位置的字符替换"string”中的字符。

selecttranslate(enamc,'AE','121)fromcmp;

是专门处理字符的,例如,能够将大写字符变为小,还能求出字符的长度。

范例:将小写字母变为大写字母

SELECTUPPER('smith')FROMDUAL;

范例:一样用户在查询一个人姓名的时候有可能考虑到那个人的姓名是大写字母存的依旧小

写字母储存的呢?

•那么现在,为了方便用户的使用就能够使用upper函数完成。

SELECT*FROMempWHEREename=UPPER('Smith,);

还能够使用lower。函数将一个字符串变为小写字母表示。

SELECTLOWER('HELLOWORLD')FROMdual;

还能够使用initcap。函数将单词的第一个字母大写

SELECT1NITCAPCHELLOWORLD')FROMdual;

范例;使用此函数将雇员表中的雇员姓名变为开头字母大写

SELECTINITCAP(ename)FROMemp;

字符串除了能够使用'、『连接之外,还能够使用CONCATO函数进行连接操作.

SELECTCONCAT('hello'world')FROMDUAL;

现在差不多完成了连接,然而此种方式确信不如'、『'好使。

在字符函数中能够进行字符串的截取、求出字符串的长度、进行指定内容的替换

­字符串截取:substr()

,字符串长度:length。

•内容替换:replace。

SELECTsubstrChello',1,3)一截取字符串,

lengthChello')-字符串长度,

replace('hello',T,'x')--字符串替换

FROMDUAL;

然而在substr()函数的时候有一点需要提醒大伙儿注意,跟面试有关:

•Oracle中substr()函数的截取点是从0依旧从1开始。

I-从0或从1开始成效是一样的,因为Oracle比较智能。

范例:要求显示所有雇员的姓名及姓名的后三个字符

•因为雇员姓名的字符串长度不一样,因此只能求出整个的长度再减去2,如此进行截取操

作。

SELECTename,SUBSTR(enamc,LENGTH(ename)-2)FROMcmp;

现在,功能差不多实现了,然而操作比较苦恼。实际上在substr()函数中提供了一种专门方

便的机制,能够采纳倒着截取的方式,只要输入的位置是负数就表示倒着进行。

SELECTename,SUBSTR(ename,-3,3)FROMemp;

数值函数

数值函数只要是包含以下几种:

•四舍五入:ROUND0

•截断小数位:TRUNC。

•取余(取模):MOD

范例:执行四舍五入操作

SELECTROUND(789.536)FROMdual;

因此,在ROUND。函数中也能够指定四舍五入的位数

范例:保留两位小数

SELECTROUND(789.536,2)FROMdual;

在使用ROUND。函数中还有一点专门有意思,能够直截了当对整数进行四舍五入的进位。

SELECTROUND(789.536,-2)FROMdual;

TRUNC()与ROUND。不同的是,在TRUNC()操作中,可不能保留任何的小数,而且小数点

也可不能执行四舍五入的操作。

范例:验证TRUNCO函数

SELECTTRUNC(789.536)FROMDUAL;

范例:通过TRUNC()也能够指定小数点的保留反薮-

SELECTTRUNC(789.536,2)FROMDUAL;

范例:使用负数表示位数

SELECTTRUNC(789.536,-2)FROMDUAL;

范例:使用MOD()函数能够进行取余的操作

SELECTMOD(10,3)FROMDUAL;

日期函数

函数功能

Add_months(x,n)返回日期X加上n个月所对应的日期。N为正数,那么返回值表示x

之后的日期:n为负数,那么返回值表示x之前的日期。

current_date返回当前会话时区所对应的日期时刻

curren_timestamp[(x)]返回当前会话时区所对应的日期时刻,可选参数x表示精度,假如

不指定参数x,那么默认精度值为6

dbtimezone返回数据库所在的时区

extract(yearmonth|dayfromx)从日期X中摘取所需要的年或月或日数据

last_day(x)返回日期X所在月份的最后一天的日期

localtimestampE(x)]返回当前会话时区所对应的日期时刻,可选参数X表示精度,假如

不指定参数X,那么默认精度值为6

months_between(x,y)返回日期x和日期y两个日期之间相差的月数

next_day(x,week)返回日期X后的由week指定的星期几所对应的日期

round(x,[fmt])返回日期x的四舍五入结果。Fmt能够

取‘YEAR'MONTH','DAY'三者之一

sysdate返回当前系统的日期时刻

systimestamp返回当前系统的日期时刻

trunk(x,[fmt])返回截断日期X时刻数据。Fmt能够取'YEAR'MONTH'DAY'

三者之一

1.SYSDATE返回当前的日期和时刻

SQL>selectsysdatefromdual;

2.add_months(x,y)在x上力口上y个月

SQL>selecthiredate,add_months(hiredate,l)fromemp

2whereename=,SMITH,;

3.1ast_day(时刻)返回当前时刻所在月的最后一天

SQL>selectsysdate,last_day(sysdate)fromdual;

4.months_between(d1,d2)返回日期dl和d2之间的月份数。假如dl晚于d2,结果为正,否

那么返回负数

SQL>selectmonths_between(sysdate,hiredate)fromemp;

5.next_date(x,week)返回x后由week指定的第一个工作日

SQL>selectsysdate,next_day(sysdate,‘星期三')fromdual;

SQL>selectsysdate,next_day(sysdate,3)fromdual

6.extract(year|month|dayfromx)抓取日期的指定部分

SQL>selectextract(yearfromsysdate)fromdual;

SQL>selectextract(monthfromsysdate)fromdual;

SQL>selectextract(dayfromto_date(,23-03-2010,/dd-mm-yy,))fromdual;

7.round(x[,fmt])日期的四舍五入

SQL>selectround(to_date(,16-3月・08'),year)fromdual;

SQL>selectround(to_date(,16-3月・08'),'month')fromdual;

SQL>selectround(to_date(116-3月-081)/day')fromdual;

格式符说明举例

yyyy年份2020

mm月份02

month

mon

dd天28

day星期几星期五

am/pm上午/下午

hh/hhl2/hh24小时2:30

mi分钟30

ss秒

rr能够把yy替换成rr有不同的成效

fm去掉数字前面的零

,观看结果

selectto_char(sysdate,'yyyy-mm-ddhh:mi:sspm')fromdual;

selectto_char(sysdate,'yyyy-mon-ddhh24:mi:sspm')fromdual;

selectto_char(sysdate,'yyyy-month-dddayhh24:mi:ss')fromdual;

selectto_char(sysdate,"'公元"yyyy"年"-month-dd"日"dayhh24:mi:ss')fromdual;

selectto_char(sysdate,'fmyyyy-mm-ddhh:mi:sspm')fromdual;

selectto_char(to_date('98-02-23','rr-mm-dd'),'yyyy-mm-dd')fromdual;

在Oracle中提供了专门多与日期操作相关的函数,包括加减日期等等。然而在日期进行加或

减结果的时候有一些规律:

•日期-数字=日期

•日期+数字=日期

•日期-日期=数字(天数)

范例:显示10部门雇员进入公司的星期数

•假如要想完成此操作,那么第一必须明白当前的日期,在Oracle中能够通过以下的操作

求出当前日期,使用sysdate表示。

SELECTSYSDATEFROMDUAL;

•求出星期数:当前日期-雇佣日期=天数/7=星期数-

SELECTempno,ename,ROUND((SYSDATE-hiredate)/7)FROMemp;

在Oracle中提供了以下的日期函数支持:

•MONTHS_BETWEEN():求出给定日期范畴的月数

•ADD_MONTHS():在指定日期上加上指定的月数,求出之后的日期

•NEXT_DAY():下一个的今天是那一个日期

•LAST_DAY():求出给定日期的最后一天日期

范例:验证MONTHSBETWEEN。

SELECTempno,ename,MONTHS_BETWEEN(sysdate,hiredate)FROMemp;

程序查询时包含了小数点,能够使用ROUND。进行四舍五入的操作。

范例:验证ADDMONTHS()函数

SELECTADD_MONTHS(SYSDATE,4)FROMDUAL;

范例:验证NEXTDAY()函数一

•此函数求出下一次给定日期数

SELECTNEXT_DAY(SYSDATE:星期一)FROMDUAL;

范例:验证LASTDAY()函数一

•求出一个日期的最后一天

SELECTLAST_DAY(SYSDATE)FROMDUAL;

转换函数

转换函数要紧有以下几种:

•TO_CHAR():转换成字符串

•TO_NUMBER():转换成数字

•TO_DATE():转换成日期

范例:查询所有雇员的雇员编号、姓名、雇佣日期

SELECTcnipno,enamc.hircdatcFROMemp;

然而现在要求能够将年、月、日进行分开,现在就能够使用TO_CHAR()函数进行拆分,拆

分的时候必须指定拆分的通配符:

,年:y,年是四位的数字,因此使用yyyy表示

•月:m,月是二位的数字,因此使用mm表示

•日:d,日是二位的数字,因此使用dd表示

还能够使用to_char()函数进行日期显示的转换功能。

•Oracle中默认的日期格式:19-4月-87

•中国的喜爱格式:1987-04-19

从运行结果中能够发觉,假如是5月,那么会使用05表示。那么那个0称为前导0,假如不期

望显示前导0的话,那么能够使用fm去掉这些0。

to_char()函数除了能够用在日期上,也能够用在数字上。

双引号("):在Oracle中单双引号含义区别

双引号被用来将包含特定或者空格列别名括起来

SELECTempno'',ename,salas''工资〃FROMemp;

双引号还被用来将文本放入日期格式

SELECTTO_CHAR(sysdate,‘fmyyyy“年“mm“月“dd“日“')

FROMDUAL;

例如:要查询全部的雇员编号、姓名、工资

SELECTempno,ename,salFROMemp;

最好在数字中加入一些符号,以分割太长的数字,一样中国使用,因此,现在,能够

使用to_char()函数进行格式化:

•9:表示一位数字

SELECTempno,ename,TO_CHAR(sal,*99,999')FROMemp;

假如,现在,期望数字能够明确的表示出区域,能够使用以下两种符号:

,$:表示美元

SELECTempno,ename,TO_CHAR(saI,'$99,9991)

FROMemp;

•L:表示Local的缩写,以本地的语言进行金额的显示

SELECTempno,ename,TO_CHAR(sal,,199,999')

FROMemp;

TO_NUMBER是能够将字符串变为数字的一种函数。

SELECTTO_NUMBER('123')+TO_NUMBER('123')FROMDUAL;

以上就表示把字符串变为数字,之后进行数字的加法操作。

TO_DATE()函数能够将一个字符串变为DATE型的数据。

•例如:有2009-2-16是一个字符串,现在要变为DATE类型。

SELECTTO_DATE('2009-02-16','yyyy-mm-dd')

FROMDUAL;

SELECTTO_CHAR(TO_DATE(,2009-02-16','yyyy-mm-dd'),'yyyy"年"mm"月"dd"H"')

FROMDUAL

通用函数

范例:要求求出每个雇员的年薪

,求出年薪的时候应该加上奖金的,格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论