﻿<?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-追梦-随笔分类-收藏别人的好文</title><link>http://www.blogjava.net/gddg/category/18710.html</link><description>我只想当个程序员</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:17:59 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:17:59 GMT</pubDate><ttl>60</ttl><item><title> [转]SQL Server和Oracle的常用函数对比 </title><link>http://www.blogjava.net/gddg/archive/2007/02/13/99753.html</link><dc:creator>小高</dc:creator><author>小高</author><pubDate>Tue, 13 Feb 2007 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/gddg/archive/2007/02/13/99753.html</guid><wfw:comment>http://www.blogjava.net/gddg/comments/99753.html</wfw:comment><comments>http://www.blogjava.net/gddg/archive/2007/02/13/99753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gddg/comments/commentRss/99753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gddg/services/trackbacks/99753.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="0" cellpadding="0" width="96%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#e8f0f1"> [转]SQL Server和Oracle的常用函数对比</td>
						</tr>
						<tr>
								<td>
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<div align="right">
																		</div>
																</td>
														</tr>
												</tbody>
										</table>
										<span class="oblog_text">  
<p>---------数学函数</p><p>1.绝对值<br />S:select abs(-1) value<br />O:select abs(-1) value from dual</p><p>2.取整(大)<br />S:select ceiling(-1.001) value<br />O:select ceil(-1.001) value from dual</p><p>3.取整（小）<br />S:select floor(-1.001) value<br />O:select floor(-1.001) value from dual</p><p>4.取整（截取）<br />S:select cast(-1.002 as int) value<br />O:select trunc(-1.002) value from dual</p><p>5.四舍五入<br />S:select round(1.23456,4) value 1.23460<br />O:select round(1.23456,4) value from dual 1.2346</p><p>6.e为底的幂<br />S:select Exp(1) value 2.7182818284590451<br />O:select Exp(1) value from dual 2.71828182</p><p>7.取e为底的对数<br />S:select log(2.7182818284590451) value 1<br />O:select ln(2.7182818284590451) value from dual; 1</p><p>8.取10为底对数<br />S:select log10(10) value 1<br />O:select log(10,10) value from dual; 1</p><p>9.取平方<br />S:select SQUARE(4) value 16<br />O:select power(4,2) value from dual 16</p><p>10.取平方根<br />S:select SQRT(4) value 2<br />O:select SQRT(4) value from dual 2</p><p>11.求任意数为底的幂<br />S:select power(3,4) value 81<br />O:select power(3,4) value from dual 81</p><p>12.取随机数<br />S:select rand() value<br />O:select sys.dbms_random.value(0,1) value from dual;</p><p>13.取符号<br />S:select sign(-8) value -1<br />O:select sign(-8) value from dual -1</p><p>----------三角函数相关</p><p>14.圆周率<br />S:SELECT PI() value 3.1415926535897931<br />O:不知道</p><p>15.sin,cos,tan 参数都以弧度为单位<br />例如：select sin(PI()/2) value 得到1（SQLServer）</p><p>16.Asin,Acos,Atan,Atan2 返回弧度</p><p>17.弧度角度互换(SQLServer，Oracle不知道)<br />DEGREES：弧度-〉角度<br />RADIANS：角度-〉弧度</p><p>---------数值间比较</p><p>18. 求集合最大值<br />S:select max(value) value from<br />(select 1 value<br />union<br />select -2 value<br />union<br />select 4 value<br />union<br />select 3 value)a</p><p>O:select greatest(1,-2,4,3) value from dual</p><p>19. 求集合最小值<br />S:select min(value) value from<br />(select 1 value<br />union<br />select -2 value<br />union<br />select 4 value<br />union<br />select 3 value)a</p><p>O:select least(1,-2,4,3) value from dual</p><p>20.如何处理null值(F2中的null以10代替)<br />S:select F1,IsNull(F2,10) value from Tbl<br />O:select F1,nvl(F2,10) value from Tbl</p><p>--------字符串函数</p><p>21.求字符序号<br />S:select ascii('a') value<br />O:select ascii('a') value from dual</p><p>22.从序号求字符<br />S:select char(97) value<br />O:select chr(97) value from dual</p><p>23.连接<br />S:select '11'+'22'+'33' value<br />O:select CONCAT('11','22')||33 value from dual</p><p>23.子串位置 --返回3<br />S:select CHARINDEX('s','sdsq',2) value<br />O:select INSTR('sdsq','s',2) value from dual</p><p>23.模糊子串的位置 --返回2,参数去掉中间%则返回7<br />// 本文转自 C++Builder 研究 - <a href="http://www.ccrun.com/article.asp?i=996&amp;d=dwn1rn">http://www.ccrun.com/article.asp?i=996&amp;d=dwn1rn</a><br />S:select patindex('%d%q%','sdsfasdqe') value<br />O:oracle没发现，但是instr可以通过第四个参数控制出现次数<br />select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6</p><p>24.求子串<br />S:select substring('abcd',2,2) value<br />O:select substr('abcd',2,2) value from dual</p><p>25.子串代替 返回aijklmnef<br />S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value<br />O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual</p><p>26.子串全部替换<br />S:Replace<br />O:select Translate('fasdbfasegas','fa','我' ) value from dual</p><p>27.长度<br />S:len,datalength<br />O:length</p><p>28.大小写转换 lower,upper</p><p>29.单词首字母大写<br />S:没发现<br />O:select INITCAP('abcd dsaf df') value from dual</p><p>30.左补空格（LPAD的第一个参数为空格则同space函数）<br />S:select space(10)+'abcd' value<br />O:select LPAD('abcd',14) value from dual</p><p>31.右补空格（RPAD的第一个参数为空格则同space函数）<br />S:select 'abcd'+space(10) value<br />O:select RPAD('abcd',14) value from dual</p><p>32.删除空格<br />S:ltrim,rtrim<br />O:ltrim,rtrim,trim</p><p>33. 重复字符串<br />S:select REPLICATE('abcd',2) value<br />O:没发现</p><p>34.发音相似性比较(这两个单词返回值一样，发音相同)<br />S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')<br />O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual<br />SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差<br />返回0-4，4为同音，1最高</p><p>--------------日期函数</p><p>35.系统时间<br />S:select getdate() value<br />O:select sysdate value from dual</p><p>36.前后几日<br />直接与整数相加减</p><p>37.求日期<br />S:select convert(char(10),getdate(),20) value<br />O:select trunc(sysdate) value from dual<br />select to_char(sysdate,'yyyy-mm-dd') value from dual</p><p>38.求时间<br />S:select convert(char(8),getdate(),108) value<br />O:select to_char(sysdate,'hh24:mm:ss') value from dual</p><p>39.取日期时间的其他部分<br />S:DATEPART 和 DATENAME 函数 （第一个参数决定）<br />O:to_char函数 第二个参数决定</p><p>参数---------------------------------下表需要补充<br />year yy, yyyy<br />quarter qq, q (季度)<br />month mm, m (m O无效)<br />dayofyear dy, y (O表星期)<br />day dd, d (d O无效)<br />week wk, ww (wk O无效)<br />weekday dw (O不清楚)<br />Hour hh,hh12,hh24 (hh12,hh24 S无效)<br />minute mi, n (n O无效)<br />second ss, s (s O无效)<br />millisecond ms (O无效)<br />----------------------------------------------</p><p>40.当月最后一天<br />S:不知道<br />O:select LAST_DAY(sysdate) value from dual</p><p>41.本星期的某一天（比如星期日）<br />S:不知道<br />O:SELECT Next_day(sysdate,7) vaule FROM DUAL;</p><p>42.字符串转时间<br />S:可以直接转或者select cast('2004-09-08'as datetime) value<br />O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;</p><p>43.求两日期某一部分的差（比如秒）<br />S:select datediff(ss,getdate(),getdate()+12.3) value<br />O:直接用两个日期相减（比如d1-d2=12.3）<br />SELECT (d1-d2)*24*60*60 vaule FROM DUAL;</p><p>44.根据差值求新的日期（比如分钟）<br />S:select dateadd(mi,8,getdate()) value<br />O:SELECT sysdate+8/60/24 vaule FROM DUAL;</p><p>45.求不同时区时间<br />S:不知道<br />O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;</p><p>-----时区参数,北京在东8区应该是Ydt-------<br />AST ADT 大西洋标准时间<br />BST BDT 白令海标准时间<br />CST CDT 中部标准时间<br />EST EDT 东部标准时间<br />GMT 格林尼治标准时间<br />HST HDT 阿拉斯加—夏威夷标准时间<br />MST MDT 山区标准时间<br />NST 纽芬兰标准时间<br />PST PDT 太平洋标准时间<br />YST YDT YUKON标准时间</p><p>Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:</p><p>函数 Oracle Microsoft SQL　Server<br />把字符转换为ASCII ASCII ASCII<br />字串连接 CONCAT (expression + expression)<br />把ASCII转换为字符 CHR CHAR<br />返回字符串中的开始字符（左起） INSTR CHARINDEX<br />把字符转换为小写 LOWER LOWER<br />把字符转换为大写 UPPER UPPER<br />填充字符串的左边 LPAD N/A<br />清除开始的空白 LTRIM LTRIM<br />清除尾部的空白 RTRIM RTRIM<br />字符串中的起始模式（pattern） INSTR PATINDEX<br />多次重复字符串 RPAD REPLICATE<br />字符串的语音表示 SOUNDEX SOUNDEX<br />重复空格的字串 RPAD SPACE<br />从数字数据转换为字符数据 TO_CHAR STR<br />子串 SUBSTR SUBSTRING<br />替换字符 REPLACE STUFF<br />将字串中的每个词首字母大写 INITCAP N/A<br />翻译字符串 TRANSLATE N/A<br />字符串长度 LENGTH DATELENGTH or LEN<br />列表中最大的字符串 GREATEST N/A<br />列表中最小的字符串 LEAST N/A<br />如果为NULL则转换字串 NVL ISNULL</p><p>日期函数</p><p>函数 Oracle Microsoft SQL　Server<br />日期相加 (date column +/- value) or<br />ADD_MONTHS DATEADD<br />两个日期的差 (date column +/- value) or<br />MONTHS_BETWEEN DATEDIFF<br />当前日期和时间 SYSDATE GETDATE()<br />一个月的最后一天 LAST_DAY N/A<br />时区转换 NEW_TIME N/A<br />日期后的第一个周日 NEXT_DAY N/A<br />代表日期的字符串 TO_CHAR DATENAME<br />代表日期的整数 TO_NUMBER<br />(TO_CHAR)) DATEPART<br />日期舍入 ROUND CONVERT<br />日期截断 TRUNC CONVERT<br />字符串转换为日期 TO_DATE CONVERT<br />如果为NULL则转换日期 NVL ISNULL</p><p>转换函数</p><p>函数 Oracle Microsoft SQL　Server<br />数字转换为字符 TO_CHAR CONVERT<br />字符转换为数字 TO_NUMBER CONVERT<br />日期转换为字符 TO_CHAR CONVERT<br />字符转换为日期 TO_DATE CONVERT<br />16进制转换为2进制 HEX_TO_RAW CONVERT<br />2进制转换为16进制 RAW_TO_HEX CONVERT</p><p>其它行级别的函数</p><p>函数 Oracle Microsoft SQL　Server<br />返回第一个非空表达式 DECODE COALESCE<br />当前序列值 CURRVAL N/A<br />下一个序列值 NEXTVAL N/A<br />如果exp1 = exp2, 返回null DECODE NULLIF<br />用户登录账号ID数字 UID SUSER_ID<br />用户登录名 USER SUSER_NAME<br />用户数据库ID数字 UID USER_ID<br />用户数据库名 USER USER_NAME<br />当前用户 CURRENT_USER CURRENT_USER<br />用户环境(audit trail) USERENV N/A<br />在CONNECT BY子句中的级别 LEVEL N/A</p><p>合计函数</p><p>函数 Oracle Microsoft SQL　Server<br />Average AVG AVG<br />Count COUNT COUNT<br />Maximum MAX MAX<br />Minimum MIN MIN<br />Standard deviation STDDEV STDEV or STDEVP<br />Summation SUM SUM<br />Variance VARIANCE VAR or VARP</p><p>Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:<br />EXTRACT(YEAR FROM 日期)</p></span>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/gddg/aggbug/99753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gddg/" target="_blank">小高</a> 2007-02-13 23:03 <a href="http://www.blogjava.net/gddg/archive/2007/02/13/99753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle处理日期大全</title><link>http://www.blogjava.net/gddg/archive/2006/12/26/90117.html</link><dc:creator>小高</dc:creator><author>小高</author><pubDate>Tue, 26 Dec 2006 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/gddg/archive/2006/12/26/90117.html</guid><description><![CDATA[
		<font color="blue" size="4">
				<b>
						<p>
								<font color="#000000" size="3">
								</font>
								<br />
								<a href="http://club.techtarget.com.cn/blog/viewBlog.html?blogId=1876">http://club.techtarget.com.cn/blog/viewBlog.html?blogId=1876</a>
								<br />
								<br />博客主人</p>
				</b>：</font>
		<font color="black" size="4">
				<b>静心-心经</b>
		</font>
		<tr>
				<td>
						<table height="23" cellspacing="0" cellpadding="0" width="760" border="0">
								<tbody>
										<tr>
												<td width="323"> </td>
										</tr>
										<tr>
										</tr>
										<tr>
										</tr>
								</tbody>
						</table>
						<table cellspacing="0" cellpadding="0" width="92%" align="center">
								<tbody>
										<tr>
												<td height="24">　<a class="green-mb">oracle处理日期大全</a></td>
										</tr>
										<tr>
												<td class="black-s" style="PADDING-RIGHT: 10px; PADDING-LEFT: 16px" height="24">Tags: <a class="blue-xl" href="http://club.techtarget.com.cn/tag/showBlogByTag.html;jsessionid=19D6790254AB08FD4DB908F3753A2DB4?tagId=3269" target="_self">oracle处理日期大全</a>  </td>
										</tr>
										<tr>
												<td class="td-black" style="PADDING-RIGHT: 10px; PADDING-LEFT: 16px; PADDING-BOTTOM: 4px; PADDING-TOP: 10px" height="30">
														<table id="Table1" style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="0" width="100%" border="0">
																<tbody>
																		<tr>
																				<td class="td-black" width="100%">
																						<a class="black-s">
																								<p>在oracle中处理日期大全 <br /><br />  TO_DATE格式  <br />Day:  <br />dd number 12  <br />dy abbreviated fri  <br />day spelled out friday  <br />ddspth spelled out, ordinal twelfth  <br />Month:  <br />mm number 03  <br />mon abbreviated mar  <br />month spelled out march  <br />Year:  <br />yy two digits 98  <br />yyyy four digits 1998  <br /><br />24小时格式下时间范围为： 0:00:00 - 23:59:59....  <br />12小时格式下时间范围为： 1:00:00 - 12:59:59 ....  <br />1.  <br />日期和字符转换函数用法（to_date,to_char）  <br /><br />2.  <br />select to_char( to_date(222,'J'),'Jsp') from dual  <br /><br />显示Two Hundred Twenty-Two  <br /><br />3.  <br />求某天是星期几  <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;  <br />星期一  <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  <br />monday  <br />设置日期语言  <br />ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';  <br />也可以这样  <br />TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')  <br /><br />4.  <br />两个日期间的天数  <br />select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;  <br /><br />5. 时间为null的用法  <br />select id, active_date from table1  <br />UNION  <br />select 1, TO_DATE(null) from dual;  <br /><br />注意要用TO_DATE(null)  <br /><br />6.  <br />a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')  <br />那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。  <br />所以，当时间需要精确的时候，觉得to_char还是必要的  <br />7. 日期格式冲突问题  <br />输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'  <br />alter system set NLS_DATE_LANGUAGE = American  <br />alter session set NLS_DATE_LANGUAGE = American  <br />或者在to_date中写  <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  <br />注意我这只是举了NLS_DATE_LANGUAGE，当然还有很多，  <br />可查看  <br />select * from nls_session_parameters  <br />select * from V$NLS_PARAMETERS  <br /><br />8.  <br />select count(*)  <br />from ( select rownum-1 rnum  <br />from all_objects  <br />where rownum &lt;= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-  <br />02-01','yyyy-mm-dd')+1  <br />)  <br />where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )  <br />not  <br />in ( '1', '7' )  <br /><br />查找2002-02-28至2002-02-01间除星期一和七的天数  <br />在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).  <br /><br />9.  <br />select months_between(to_date('01-31-1999','MM-DD-YYYY'),  <br />to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;  <br />1  <br /><br />select months_between(to_date('02-01-1999','MM-DD-YYYY'),  <br />to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;  <br /><br />1.03225806451613  <br />10. Next_day的用法  <br />Next_day(date, day)  <br /><br />Monday-Sunday, for format code DAY  <br />Mon-Sun, for format code DY  <br />1-7, for format code D  <br /><br />11  <br />select to_char(sysdate,'hh:mi:ss') TIME from all_objects  <br />注意：第一条记录的TIME 与最后一行是一样的  <br />可以建立一个函数来处理这个问题  <br />create or replace function sys_date return date is  <br />begin  <br />return sysdate;  <br />end;  <br /><br />select to_char(sys_date,'hh:mi:ss') from all_objects;  <br />12.  <br />获得小时数  <br /><br />SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer  <br />SQL&gt; select sysdate ,to_char(sysdate,'hh') from dual;  <br /><br />SYSDATE TO_CHAR(SYSDATE,'HH')  <br />-------------------- ---------------------  <br />2003-10-13 19:35:21 07  <br /><br />SQL&gt; select sysdate ,to_char(sysdate,'hh24') from dual;  <br /><br />SYSDATE TO_CHAR(SYSDATE,'HH24')  <br />-------------------- -----------------------  <br />2003-10-13 19:35:21 19  <br /><br />获取年月日与此类似  <br />13.  <br />年月日的处理  <br />select older_date,  <br />newer_date,  <br />years,  <br />months,  <br />abs(  <br />trunc(  <br />newer_date-  <br />add_months( older_date,years*12+months )  <br />)  <br />) days  <br />from ( select  <br />trunc(months_between( newer_date, older_date )/12) YEARS,  <br />mod(trunc(months_between( newer_date, older_date )),  <br />12 ) MONTHS,  <br />newer_date,  <br />older_date  <br />from ( select hiredate older_date,  <br />add_months(hiredate,rownum)+rownum newer_date  <br />from emp )  <br />)  <br /><br />14.  <br />处理月份天数不定的办法  <br />select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual  <br /><br />16.  <br />找出今年的天数  <br />select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual  <br /><br />闰年的处理方法  <br />to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )  <br />如果是28就不是闰年  <br /><br />17.  <br />yyyy与rrrr的区别  <br />'YYYY99 TO_C  <br />------- ----  <br />yyyy 99 0099  <br />rrrr 99 1999  <br />yyyy 01 0001  <br />rrrr 01 2001  <br /><br />18.不同时区的处理  <br />select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate  <br />from dual;  <br /><br />19.  <br />5秒钟一个间隔  <br />Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')  <br />from dual  <br /><br />2002-11-1 9:55:00 35786  <br />SSSSS表示5位秒数  <br /><br />20.  <br />一年的第几天  <br />select TO_CHAR(SYSDATE,'DDD'),sysdate from dual  <br />310 2002-11-6 10:03:51  <br /><br />21.计算小时,分,秒,毫秒  <br />select  <br />Days,  <br />A,  <br />TRUNC(A*24) Hours,  <br />TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,  <br />TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,  <br />TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds  <br />from  <br />(  <br />select  <br />trunc(sysdate) Days,  <br />sysdate - trunc(sysdate) A  <br />from dual  <br />)  <br /><br /><br /><br />select * from tabname  <br />order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');  <br /><br />//  <br />floor((date2-date1) /365) 作为年  <br />floor((date2-date1, 365) /30) 作为月  <br />mod(mod(date2-date1, 365), 30)作为日.  <br />23.next_day函数  <br />next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。  <br />1 2 3 4 5 6 7  <br />日 一 二 三 四 五 六<br /><br /><br />===================================<br />在oracle中有很多关于日期的函数，如： <br />1、add_months()用于从一个日期值增加或减少一些月份 <br />date_value:=add_months(date_value,number_of_months) <br />例： <br />SQL&gt; select add_months(sysdate,12) "Next Year" from dual; <br /><br />Next Year <br />---------- <br />13-11月-04 <br /><br />SQL&gt; select add_months(sysdate,112) "Last Year" from dual; <br /><br />Last Year <br />---------- <br />13-3月 -13 <br /><br />SQL&gt; <br /><br />2、current_date()返回当前会放时区中的当前日期 <br />date_value:=current_date <br />SQL&gt; column sessiontimezone for a15 <br />SQL&gt; select sessiontimezone,current_date from dual; <br /><br />SESSIONTIMEZONE CURRENT_DA <br />--------------- ---------- <br />+08:00 13-11月-03 <br /><br />SQL&gt; alter session set time_zone='-11:00' <br />  2 / <br /><br />会话已更改。 <br /><br />SQL&gt; select sessiontimezone,current_timestamp from dual; <br /><br />SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />-11:00 12-11月-03 04.59.13.668000 下午 -11: <br />                00 <br /><br />SQL&gt; <br /><br />3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 <br />timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) <br />SQL&gt; column sessiontimezone for a15 <br />SQL&gt; column current_timestamp format a36 <br />SQL&gt; select sessiontimezone,current_timestamp from dual; <br /><br />SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />+08:00 13-11月-03 11.56.28.160000 上午 +08: <br />                00 <br /><br />SQL&gt; alter session set time_zone='-11:00' <br />  2 / <br /><br />会话已更改。 <br /><br />SQL&gt; select sessiontimezone,current_timestamp from dual; <br /><br />SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />-11:00 12-11月-03 04.58.00.243000 下午 -11: <br />                00 <br /><br />SQL&gt; <br /><br />4、dbtimezone()返回时区 <br />varchar_value:=dbtimezone <br />SQL&gt; select dbtimezone from dual; <br /><br />DBTIME <br />------ <br />-07:00 <br /><br />SQL&gt; <br /><br />5、extract()找出日期或间隔值的字段值 <br />date_value:=extract(date_field from [datetime_value|interval_value]) <br />SQL&gt; select extract(month from sysdate) "This Month" from dual; <br /><br />This Month <br />---------- <br />        11 <br /><br />SQL&gt; select extract(year from add_months(sysdate,36)) "3 Years Out" from dual; <br /><br />3 Years Out <br />----------- <br />       2006 <br /><br />SQL&gt; <br /><br />6、last_day()返回包含了日期参数的月份的最后一天的日期 <br />date_value:=last_day(date_value) <br />SQL&gt; select last_day(date'2000-02-01') "Leap Yr?" from dual; <br /><br />Leap Yr? <br />---------- <br />29-2月 -00 <br /><br />SQL&gt; select last_day(sysdate) "Last day of this month" from dual; <br /><br />Last day o <br />---------- <br />30-11月-03 <br /><br />SQL&gt; <br /><br />7、localtimestamp()返回会话中的日期和时间 <br />timestamp_value:=localtimestamp <br />SQL&gt; column localtimestamp format a28 <br />SQL&gt; select localtimestamp from dual; <br /><br />LOCALTIMESTAMP <br />---------------------------- <br />13-11月-03 12.09.15.433000 <br />下午 <br /><br />SQL&gt; select localtimestamp,current_timestamp from dual; <br /><br />LOCALTIMESTAMP CURRENT_TIMESTAMP <br />---------------------------- ------------------------------------ <br />13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: <br />下午 00 <br /><br />SQL&gt; alter session set time_zone='-11:00'; <br /><br />会话已更改。 <br /><br />SQL&gt; select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual; <br /><br />LOCALTIMESTAMP SYSDATE <br />---------------------------- ------------------------ <br />12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午 <br />下午 <br /><br />SQL&gt; <br /><br />8、months_between()判断两个日期之间的月份数量 <br />number_value:=months_between(date_value,date_value) <br />SQL&gt; select months_between(sysdate,date'1971-05-18') from dual; <br /><br />MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18') <br />---------------------------------------- <br />                              389.855143 <br /><br />SQL&gt; select months_between(sysdate,date'2001-01-01') from dual; <br /><br />MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01') <br />---------------------------------------- <br />                              34.4035409 <br /><br />SQL&gt; <br /><br />9、next_day()给定一个日期值，返回由第二个参数指出的日子第一次出现在的日期值（应返回相应日子的名称字符串）<br /><br /><br /><br />==============================================<br />1.查询某周的第一天<br />select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') last_day<br />from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww<br />         from dual)<br /><br />select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6 first_day from dual<br /><br />select min(v_date) from<br />  (select (to_date('200201','yyyymm') + rownum) v_date<br />  from all_tables<br />  where rownum &lt; 370)<br />where to_char(v_date,'yyyy-iw') = '2002-49'<br /><br />2.查询某周的最后一天<br />select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') - 6 first_day<br />  from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww<br />          from dual)<br />          <br />select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d') last_day from dual<br /><br />select max(v_date) from<br />  (select (to_date('200408','yyyymm') + rownum) v_date<br />  from all_tables<br />  where rownum &lt; 370)<br />where to_char(v_date,'yyyy-iw') = '2004-33'<br /><br />3.查询某周的日期<br />select min_date, to_char(min_date,'day') day from<br />(select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date <br />        from all_tables<br />  where rownum &lt;= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)  <br />  union<br /><br />  select to_date(substr('2004-33',1,4)-1||<br />         decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date <br />        from all_tables          <br />          where rownum &lt;= 7<br />  union<br /><br />  select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date <br />        from all_tables          <br />          where rownum &lt;= 7                       <br />)<br />where to_char(min_date,'yyyy-iw') ='2004-33'<br /><br /><br />=============================================<br />在论坛中常常看到有对oracle中时间运算提问的问题，今天有时间，看了看以前各位兄弟的贴子，整理了一下，并作了个示例，希望会对大家有帮助。 <br />首先感谢ern、eric.li及各版主还有热心的兄弟们 <br /><br />内容如下： <br />1、oracle支持对日期进行运算 <br />2、日期运算时是以天为单位进行的 <br />3、当需要以分秒等更小的单位算值时，按时间进制进行转换即可 <br />4、进行时间进制转换时注意加括号（见示例中红色括号），否则会出问题 <br /><br />SQL&gt; alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; <br /><br />会话已更改。 <br /><br />SQL&gt; set serverout on <br />SQL&gt; declare <br />  2 DateValue date; <br />  3 begin <br />  4 select sysdate into DateValue from dual; <br />  5 dbms_output.put_line('源时间:'||to_char(DateValue)); <br />  6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); <br />  7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); <br />  8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60))); <br />  9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 <br />0))); <br />10 end; <br />11 / <br />源时间:2003-12-29 11:53:41 <br />源时间减1天:2003-12-28 11:53:41 <br />源时间减1天1小时:2003-12-28 10:53:41 <br />源时间减1天1小时1分:2003-12-28 10:52:41 <br />源时间减1天1小时1分1秒:2003-12-28 10:52:40 <br /><br />PL/SQL 过程已成功完成。 <br /><br />SQL&gt;<br /></p>
																						</a>
																				</td>
																		</tr>
																</tbody>
														</table>
												</td>
										</tr>
								</tbody>
						</table>
				</td>
		</tr>
		<tr>
				<td width="507">
						<img height="17" src="http://club.techtarget.com.cn/images/my_bei03.gif" width="567" />
				</td>
		</tr>
		<br />
		<table cellspacing="0" cellpadding="0" width="99%">
				<tbody>
						<tr>
								<td style="PADDING-LEFT: 20px; FONT-SIZE: 12px" height="30">
										<a class="blue-xl" href="http://club.techtarget.com.cn/community/addBlogComment.html?blogId=1876" target="_self">
										</a>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/gddg/aggbug/90117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gddg/" target="_blank">小高</a> 2006-12-26 15:27 <a href="http://www.blogjava.net/gddg/archive/2006/12/26/90117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>