oracle系统函数

<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->

--===============

--author:yeeXun

--date:发表于 @ 2010年12月21日 17:03:00

--address:Jau 17-304

--===============

一. 字符函数

lowerchar ):将字符串转化为小写格式

upperchar ):将字符串转化为大写格式

lengthchar ):返回字符串的长度

substrcharmn ):在 char 字符串中从 m 开始,截取 n 个字符

❤如果省略了n ,那么默认长度是 m 位置以后剩下的 char 的长度

实例:

?将所有员工的名字按小写方式显示:

selectlower(ename)name,jobfromemp;

NAMEJOB

-------------------

smithCLERK

allenSALESMAN

wardSALESMAN

...

14rowsselected

?将所有员工的名字按大写的方式显示:
selectupper(ename)fromemporderbyename;

UPPER(ENAME)

------------

ADAMS

ALLEN

BLAKE

...

14rowsselected

?显示正好为5个字符的员工的姓名:

selectename,job,salfromempwherelength(ename)=5;

ENAMEJOBSAL

----------------------------

SMITHCLERK800.00

ALLENSALESMAN1600.00

JONESMANAGER2975.00

...

8rowsselected

?显示所有员工姓名的前三个字符:

selectsubstr(ename,1,3)姓名fromemp;

姓名

------

SMI

ALL

WAR

...

14rowsselected

?以首字母大写其他字母小写的方式显示所有员工的姓名:

select upper(substr(ename,1,1))||lower(substr(ename,2 ,length(ename)-1 ) )姓名 fromemp;

姓名

--------------------

Smith

Allen

Ward

...

14rowsselected

?将首字母小写其他字符大写的方式显示员工姓名:

s elect lower(substr(ename,1,1))||upper(substr(ename,2 ,length(ename ) -1) 姓名 fromemp;

姓名

--------------------

sMITH

aLLEN

wARD

...

14rowsselected

/*郁闷啊,突然的断电,我写的东西都没了,登录 PL/SQLDeveloper 说没有监听 程序,难道是监听程序自动关闭了?但是由oracle 附带的 oracleSQL*Plus 登录, 能成功登录。

我的电脑-> 管理 -> 服务和应用程序 -> 服务

查看,原来真的这突然的断电导致了oracle 监听进程 OracleOraDb10g_home1TNSListener 关闭,手动启动;再次登录 PL/SQLDeveloper ,还说没有监听进程,再次郁闷;重新启动,登录 PL/SQLDeveloper ,成功!原来啊,刚刚才的监听进程启动没生效!

*/

replace(char1,search_string,replace_string):char1 里面用 replace_string来替换 search_string

?显示所有员工的姓名,用" 我是 A" 替换所有 "A"

selectreplace(ename,'A','我是大啊')替换后的姓名fromemp;

替换后的姓名

-------------------------------------------------------------- ------------------

SMITH

我是大啊LLEN

W我是大啊RD

M我是大啊RTIN

BL我是大啊KE

SCOTT

我是大啊D我是大啊MS

J我是大啊MES

...

14rowsselected

instrchar1,char2,[,n[,m]]: 取子串在字符串的位置

二. 数学函数

数学函数的输入参数和返回值的数据类型都是数字类型的,数学函数有:cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round,... 常用的有:

round(n,[m]) :用于执行四舍五入,如果省略了 m ,则四舍五入到整数,如果 m 为正数,则四舍五入到小数的m 位后,如果 m 为负数,则四舍五入到小数点的 m 位前。

?计算奖金不为空的员工的年薪

selectename,(round(sal)+round(comm))*13年薪,salfromempwhere commisnotnull;

ENAME年薪SAL

-----------------------------

ALLEN247001600.00

WARD227501250.00

MARTIN344501250.00

TURNER195001500.00

trunc(n,[m]):用于截取数字,如果省略掉 m ,就截取小数部分,如果 m 是正数, 就截取到小数点的m 位后,如果 m 为负数,则截取到小数点的前 m

mod(m,n) :求 mn 的余数

floor(n) :返回小于或等于 n 的最大整数

ceil(n) :返回大于会等于 n 的最小整数

dual表:在做 oracle 测试时,可以使用此表,主要用于做测试,虚拟。

?显示在一个月为30 天的情况下所有员工的日薪金,忽略余数:

selecttrunc(sal/30),enamefromemp;

TRUNC(SAL/30)ENAME

-----------------------

26SMITH

53ALLEN

41WARD

...

14rowsselected

selectfloor(sal/30),enamefromemp;

结果与上面的相同

其他数学函数:

Abs(n):返回 n 的绝对值

Acos(n):返回 n 的反余弦值

Asin(n):返回 n 的反正弦值

Atan(n):返回 n 的反正切值

Cos(n):

Exp(n):返回 en 次幂

Log(m,n):取对数

Power(m,n):返回 mn 次幂

三. 日期函数

/*

当打开PL/SQLDeveloper 进行登录时,弹出一个警告窗口:( ORA-12560:TNS: 协议适配器错误),之后无法登录。我的电脑-> 属性 -> 管理 -> 服务 , 发现我的 oracle 监听进程自动关闭了,当我启动时,弹出这样的警告信息:(在本地计算机上的 OracleOraDb10g_home1TNSListener服务启动后又停止。一些服务自动停止,如 果它们没有什么可做的,例如" 性能日志和警报 " 服务)。也就是启动失败,但是用 oracle自动附带的 OracleSQL*Plus 登录,成功了,这是为什么呢? */

介绍

日期函数用于处理date 类型的数据,默认情况下日期格式为 dd-mm-yy ,例如 25-7-1987。

1. sysdate:返回系统时间

2. add_months(d,n):

?查找已经入职 8 各月多的员工

selectename,job,salfromempwhere sysdate>add_months(hiredate,300)

?显示满10 年服务年限的员工的姓名和雇佣日期

selectename,job,salfromempwhere sysdate>add_months(hiredate,240)

?对于每个员工,显示加入公司的天数

selecttrunc(sysdate-hiredate)入职天数 ,ename 姓名 fromemp;

3.last_day(d):返回指定日期所在月份的最后一天

?找出各月倒数第三天受雇的所有员工

selecthiredate,enamefromempwhere last_day(hiredate)-2=hiredate;

-----------------------------------------

以上内容是在两周之前写下的

-----------------------------------------

/*课程设计过去了一个周,紧接着是一课程期末考试,和 6 级考试,哎!紧张的日子 过去了,现在有时间来继续我的 oracle 学习了。

两周之前,我的PL/SQLDevloper 出了点问题,一直未去解决。今天打开它时,居 然已经过了 30 天的试用期,郁闷,卸载了重新安装吧!可是找不到源文件了,于是上 找了一个 PL/SQLDevloper8.0 版本的,试用期也是 30 天。刚刚安装好,用户 scott 登录,居然连接超时,没有出现前两周出现的情况。但是提示未登录,于是建 一个 commandwindow ,在里面输入: connectscott/tiger

ConnectedtoOracleDatabase10gEnterpriseEditionRelease10.2.0.1.0

Connectedasscott

居然连接成功了!

SQL>showuser

Useris"scott"

再次验证:

select*fromemp;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO

----------------------------------------------------------------

7369SMITHCLERK79021980-12-17800.0020

7499ALLENSALESMAN76981981-2-201600.00300.0030

.......

14rowsselected

*/

四. 转换函数

转换函数用于将数据类型从一种转换为另一种。在某些情况下,oracleserver 允许值的数据类型和实际的不一样,这时 oracleserver 会隐式的转化数据类型。

例如:

createtablet1( idint;

insertintot1values( '10'-- 这样 oracle 会自动的将 '10' 转换为 10

createtablet2( idvarchar2(10);

insertintot2values( 1-- 这样 oracle 就会自动的将 1 转换为 '1';

1.to_char函数

to_char

插入一条数据:

SQL>insertintoempvalues(8881,'test用户 ','MANAGER',7782,sysdate,23,23,10);

emp 表中的雇佣日期转换为字符串的形式显示出来:

SQL>selectename,to_char(hiredate,'yyyy-mm-ddhh24:mi:ss')fromemp;

ENAMETO_CHAR(HIREDATE,'YYYY-MM-DDHH

----------------------------------------

test用户2010-12-2116:03:33

SMITH1980-12-1700:00:00

ALLEN1981-02-2000:00:00

......

15rowsselected

这里说一下日期格式:

yy:两位数字的年份2010-->10

yyyy:四位数字的年份2010

mm:两位数字的月份2月-->02

dd:两位数字的天5号-->05

hh24:时间的24小时制

hh12:时间的12小时制度

mi、ss:显示分钟/秒

9:显示数字,忽略前面的 0

0:显示数字,如位数不足,则用 0 补齐

·:在指定位置显示小数点

,:在指定位置显示逗号

$:在数字前加美元符号

L:在数字前加本地货币符号

C:在数字前加国际货币符号

G:在指定位置显示组分隔符

D:在指定位置显示小数点符号 (.)

SQL>selectename,to_char(hiredate,'yyyy-mm-ddhh24:mi:ss'),to_char(sal,'L99,999.99')fromemp;

ENAMETO_CHAR(HIREDATE,'YYYY-MM-DDHHTO_CHAR(SAL,'L99,999.99')

-----------------------------------------------------------------

test用户2010-12-2116:03:33¥23.00

SMITH1980-12-1700:00:00¥800.00

ALLEN1981-02-2000:00:00¥1,600.00

......

15rowsselected

?显示 1980年入职的员工

SQL>select*fromempwhereto_char(hiredate,'yyyy')=1980;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO

----------------------------------------------------------------

7369SMITHCLERK79021980-12-17800.0020

2. t o_date函数

t o_date函数用于将字符串转换为 date 类型的数据。

3.sys_context

每个用户对应一个方案,方案名和用户名相同。用户一旦被创建后,就为其创建了一个方案。

1) .terminal:当前会话客户所对应的终端的标识符

2) .language:语言

3) .db_name:当前数据库名称

4) .mls_date_format:当前会话客户所对应的日期格式

5) .session_user:当前会话客户所对应的数据库用户名

6) .current_schema:当前会话客户所对应的默认方案名

7) .host:返回数据库所在主机名称

SQL>selectsys_context('userenv','language')fromdual;

SYS_CONTEXT('USERENV','LANGUAG

----------------------------------------------------------

SIMPLIFIEDCHINESE_CHINA.ZHS16GBK

实例这里有

http://xsb.itpub.net/post/419/51694

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值