﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-geeksun space</title><link>http://www.blogjava.net/geeksun/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 08:11:55 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 08:11:55 GMT</pubDate><ttl>60</ttl><item><title>Oracle 函数</title><link>http://www.blogjava.net/geeksun/archive/2008/10/31/237846.html</link><dc:creator>geeksun</dc:creator><author>geeksun</author><pubDate>Fri, 31 Oct 2008 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/geeksun/archive/2008/10/31/237846.html</guid><wfw:comment>http://www.blogjava.net/geeksun/comments/237846.html</wfw:comment><comments>http://www.blogjava.net/geeksun/archive/2008/10/31/237846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/geeksun/comments/commentRss/237846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/geeksun/services/trackbacks/237846.html</trackback:ping><description><![CDATA[<div>lower函数：<br />
&nbsp;此函数将全部的大写字母都可以变为小写字母<br />
&nbsp;&nbsp;SELECT lower('ABCDE') FROM dual ;<br />
&nbsp;&#8226; dual表为一个虚拟表，以后介绍</div>
<div>upper函数：将输入的字符串变为大写字母<br />
&nbsp;&nbsp;SELECT upper('abcd') FROM dual ;</div>
<div>例如：之前查询的时候区分大小写，所以此处如果输入的是小写字母，就可以通过upper函数进行转换。<br />
&nbsp;查询雇员姓名内容为smith的全部员工。<br />
&nbsp;SELECT * FROM emp WHERE ename=UPPER('smith') ;</div>
<div>initcap函数：将每个字符串的首字母大写<br />
&nbsp;例如：要求将雇员表中的全部雇员信息的首字母大写。<br />
&nbsp;&nbsp;SELECT initcap(lower(ename)) FROM emp ;<br />
&nbsp;函数可以进行嵌套。</div>
<div>concat函数：字符串连接，可以连接两个字符串<br />
&nbsp;SELECT concat('hello',' world!!!') FROM dual ;<br />
&nbsp;实际上使用&#8220;||&#8221;也可以完成两个字符串的连接操作。</div>
<div>substr函数：字符串截取<br />
&nbsp;截取的时候需要注意：要从那里开始截取，之后取多长的长度。<br />
&nbsp;SELECT substr('hello',1,2) FROM dual ;<br />
&nbsp;注意：substr函数的开始点是从1开始的。</div>
<div>length：取出字符串的长度，例如，取出每一个雇员的姓名的长度：<br />
&nbsp;SELECT ename||' 姓名的长度为：'||length(ename) FROM emp ;</div>
<div>instr函数：查找在一个字符串中是否有指定的字符串，如果有，则返回其位置<br />
&nbsp;SELECT instr('hello','x') FROM dual ;<br />
&nbsp;&#8226; 如果有此字符串，则返回位置，如果没有，则返回0。</div>
<div>replace函数：替换，可以将一个字符串中的指定字符串替换为其他内容：<br />
&nbsp;SELECT replace('hello','l','x') FROM dual ;</div>
<div>trim函数：去掉左右空格的函数<br />
&nbsp;SELECT trim('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ') FROM dual ;</div>
<div>查询：<br />
&nbsp;1、&nbsp;检索姓名最后一个字母为N的雇员<br />
&nbsp;&nbsp;&#8226; SELECT * FROM emp WHERE substr(ename,-1,1)='N';<br />
&nbsp;2、&nbsp;检索职务为&#8220;SALE&#8221;的全部员工信息<br />
&nbsp;&nbsp;&#8226; SELECT * FROM emp WHERE substr(job,1,4)='SALE';</div>
<div>&nbsp;</div>
<div>ROUND表示四舍五入<br />
&nbsp;&#8226;SELECT ROUND(34.56,-1) FROM dual ;<br />
TRUNC函数：表示截取函数<br />
&nbsp;&#8226; SELECT TRUNC(34.56,-2) FROM dual ;<br />
MOD函数：取余数<br />
&nbsp;&#8226;SELECT MOD(10,3) FROM dual ;</div>
<div>取得当前日期：<br />
&nbsp;在Oracle中可以通过查询sysdate取得当前的日期：<br />
&nbsp;&nbsp;&#8226; SELECT sysdate FROM dual ;<br />
&nbsp;</div>
<div>例如：计算10部门中的员工进入公司的日期数：<br />
&nbsp;肯定使用当前日期-雇佣日期（hiredate） = 天数，天数/7为日期数。<br />
&nbsp;SELECT ename,round((sysdate-hiredate)/7) from emp ;</div>
<div>&nbsp;<br />
&nbsp;</div>
<div>例如：<br />
&nbsp;求出所有员工的受雇月数：months_between，使用当前日期与雇佣日期比较。<br />
&nbsp;&#8226; SELECT ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;</div>
<div>ADD_MONTHS：表示在日期的基础上增加几个月之后的日期：<br />
&nbsp;求出，三个月之后的日期是那一天：<br />
&nbsp;&nbsp;SELECT ADD_MONTHS(sysdate,3) FROM dual ;</div>
<div>NEXT_DAY：表示下一个这天（星期几）<br />
&nbsp;SELECT NEXT_DAY(sysdate,'星期一') FROM dual ;</div>
<div>LAST_DAY：求出当前日期所在月的最后一天：<br />
&nbsp;SELECT LAST_DAY(sysdate) FROM dual ;</div>
<div>例如：<br />
&nbsp;显示受雇时间不满320-个月的雇员的编号、受雇日期、受雇的月数、满六个月的复审日期、受雇后的第一个星期五以及受雇当月的最后一天<br />
求出雇佣月数大于320的雇员信息：<br />
&nbsp;SELECT * FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)&gt;320 ;<br />
综合：<br />
&nbsp;SELECT empno 雇员编号,hiredate 雇佣日期, <br />
&nbsp;round(MONTHS_BETWEEN(sysdate,hiredate)) 雇佣月数 ,<br />
&nbsp;add_months(hiredate,6) 复审日期,next_day(hiredate,'星期五') 受雇后到第一个星期五,<br />
&nbsp;last_day(hiredate) 最后一天<br />
FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)&gt;320 ;<br />
&nbsp;</div>
<div>例如：现在要求取出全部员工受雇的年份<br />
&nbsp;实际上要对hiredate中的内容进行分离，取出年份。<br />
&nbsp;&nbsp;SELECT empno,ename,TO_CHAR(hiredate,'YYYY') FROM emp ;<br />
&nbsp;取出雇佣的月份和日：<br />
&nbsp;&nbsp;SELECT empno,ename,TO_CHAR(hiredate,'YYYY') 年,<br />
TO_CHAR(hiredate,'MM') 月,TO_CHAR(hiredate,'DD') 月 FROM emp ;</div>
<div>也可以通过此函数把显示的日期的格式进行修正：<br />
&nbsp;年-月-日：2008-4-7<br />
&nbsp;SELECT empno,ename,TO_CHAR(hiredate,'YYYY-MM-DD')&nbsp; FROM emp ;</div>
<div>&nbsp;</div>
<div>&nbsp;正常情况下的日期，如果是月应该是两位，如果现在是2月，则会显示02月，如果现在不希望显示出前导0，则可以加入一个fm<br />
&nbsp;SELECT empno,ename,TO_CHAR(hiredate,'fmYYYY-MM-DD')&nbsp; FROM emp ;</div>
<div>&nbsp;<br />
可以将一个数值按照指定的格式输出。<br />
&nbsp;SELECT empno,sal FROM emp ;  此时不是很明确的知道查询出的工资，而且工资的位数也不标准。<br />
&nbsp;使用to_char完成：SELECT empno,to_char(sal,'L99,999') FROM emp ;</div>
<div>to_date函数：<br />
&nbsp;可以将一个字符串变为一个日期类型。<br />
&nbsp;&nbsp;SELECT to_date('2007-4-7','YYYY-MM-DD') FROM dual ;</div>
<div>要求：<br />
&nbsp;查询出全部雇员的年薪（基本工资和佣金）。<br />
&nbsp;&nbsp;SELECT empno,(sal+comm)*12 FROM emp ;<br />
&nbsp;如果没有奖金的雇员，则年薪也没了，因为是null值，所以最后的计算结果仍然是null。<br />
希望如果最后的值为null，则应该按0进行计算，此时就需要NVL函数的支持。</div>
<div>Nvl函数可以将空值变为一个特定的数值<br />
&nbsp;SELECT empno,sal,NVL(comm,0) FROM emp ;<br />
使用此函数修改上面的查询：<br />
&nbsp;SELECT empno,(sal+NVL(comm,0))*12 FROM emp ;</div>
&nbsp;
select empno,ename,job from emp ;<br />
&nbsp;希望：<br />
&nbsp;&#8226; 如果工作是CLERK：则显示办事员<br />
&nbsp;&#8226; 如果工作是SALESMAN：则显示为销售人员<br />
&nbsp;&#8226; 如果工作是MANAGER，则显示为经理<br />
&nbsp;SELECT empno,ename,DECODE(job,'CLERK','办事员','SALESMAN','销售人员','MANAGER','经理') FROM emp ;<br />
<br />
转自：http://lixinghua.blog.51cto.com/421838/91209<br />
<img src ="http://www.blogjava.net/geeksun/aggbug/237846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/geeksun/" target="_blank">geeksun</a> 2008-10-31 16:59 <a href="http://www.blogjava.net/geeksun/archive/2008/10/31/237846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>