Oracle ->> 日期函数

摘要:
Oracle下的日期时间函数与SQLSERVER完全不同。这里有一篇关于许多例子的博文。http://www.cnblogs.com/kerrycode/archive/2011/04/27/2029906.html还有一篇关于使用Extract的博客文章--星期日=1星期一=2星期二=3星期三=4星期四=5星期五=6星期六=7SELECTNEXT_DAYFROMDUAL;--7: CURRENT_DATE当前会话时区中的当前日期SELECTCURRENT_ DATEFROMDUAL;--8: CURRENT_TIMESTAMP返回当前会话时区中的当前日期,时间戳的时区数据类型为SELECTCURRENT_ TIMESTAMPRODUAL;--9: DBTIMEZONE()返回时区SELECTDBTIMEZONEFROMDUAL--10:SESSIONTIMEZONE返回回调时区,其中DBTIMEZON是数据库,会话是当前会话的,因为时区可以在会话级别更改SELECTSESSIONTIMEZoNEFROMDOUL;ALTERSESSIONSETTIME_ZONE='8:00';SELECTSESSIONTIMEZONEFROMDUAL;--11: EXTRACT查找日期或间隔值的字段值SELECT EXTRACT“MONTH”FROM DUAL;选择从dual中提取“DAY”;select从dual中提取“YEAR”;--12: LOCALTIMESTAMP返回会话SELECTLOCALTIMEstaMPROMDUAL中的日期和时间--13:TRUNC TRUNC函数截断指定元素的日期值。

Oracle下的日期时间函数和SQL SERVER真他妈不同。这个真需要时间适应。这里找到一篇博文讲到许多例子。挺全的。http://www.cnblogs.com/kerrycode/archive/2011/04/27/2029906.html

这里还有篇博文讲到Extract的用法。这个函数可以实现SQL SERVER下的YEAR、MONTH、DAY这些函数的功能。

---------------------------------------------日期/时间函数-----------------------------------------------
--1:  SYSDATE
用来得到系统的当前日期

SELECT SYSDATE FROM DUAL;



--2:  ADD_MONTHS
增加或减去月份

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20080818','YYYYMMDD'),2), 'YYYY-MM-DD') FROM DUAL;


SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL


--3:   LAST_DAY
返回日期的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -2)) FROM DUAL;


--4:   MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份

--参数的格式需要注意

SELECT MONTHS_BETWEEN(TO_DATE('2011-05-03', 'YYYY-MM-DD'), TO_DATE('2011-01-23', 'YYYY-MM-DD')) FROM DUAL;


SELECT MONTHS_BETWEEN('19-12月-1999','19-3月-1999') mon_between FROM DUAL;


--SELECT MONTHS_BETWEEN('2011-1月-23', '2011-9月-1') FROM DUAL;  文字与格式字符串不匹配


--5:    NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间

SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD HH24:MI:SS') BeiJing_Time,
       TO_CHAR(NEW_TIME(SYSDATE, 'PDT', 'GMT'), 'YYYY.MM.DD HH24:MI:SS') LOS_ANGELS FROM DUAL;
       
       
 简写                  时区                 
 AST OR ADT          大西洋标准时间         
 HST OR HDT          阿拉斯加—夏威夷时间
 BST OR BDT          英国夏令时
 MST OR MDT          美国山区时间
 CST OR CDT          美国中央时区
 NST                 新大陆标准时间
 EST OR EDT          美国东部时间
 PST OR PDT          太平洋标准时间
 GMT                 格伦威治标准时间
 YST OR YDT          Yukon标准时间
 
 --6:    NEXT_DAY 
 返回与制定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。
 
 
 --星期日 = 1  星期一 = 2  星期二 = 3  星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7  

 SELECT NEXT_DAY(SYSDATE, 2) FROM DUAL;
 
 
--7:    CURRENT_DATE
 当前会话时区中的当前日期 

SELECT CURRENT_DATE FROM DUAL;


--8:    CURRENT_TIMESTAMP
以timestamp with time zone数据类型返回当前会话时区中的当前日期


SELECT CURRENT_TIMESTAMP FROM DUAL;


--9:   DBTIMEZONE() 
返回时区

SELECT DBTIMEZONE FROM DUAL;

--10:   SESSIONTIMEZONE
返回回话时区  其中DBTIMEZONE是数据库的,session是针对当前会话的,因为时区在会话级可以改变

SELECT SESSIONTIMEZONE FROM DUAL;  


ALTER SESSION SET TIME_ZONE = '8:00';

SELECT SESSIONTIMEZONE FROM DUAL;  


--11:EXTRACT 
找出日期或间隔值的字段值 

SELECT EXTRACT(MONTH FROM SYSDATE) "MONTH" FROM DUAL;


SELECT EXTRACT(DAY  FROM SYSDATE)  AS "DAY" FROM DUAL;


SELECT EXTRACT(YEAR FROM SYSDATE) AS "YEAR" FROM DUAL;


--12:LOCALTIMESTAMP 
返回会话中的日期和时间 

SELECT LOCALTIMESTAMP FROM DUAL;

--13:  TRUNC(for dates)  TRUNC函数为指定元素而截去的日期值。  其具体的语法格式如下:  TRUNC(date[,fmt])  其中:  date 一个日期值  fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去  下面是该函数的使用情况:  TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am')  ='24-Nov-1999 12:00:00 am'  TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am'   SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL; --返回当年第一天.   SELECT TRUNC(SYSDATE,'MM') FROM DUAL; --返回当月第一天.  SELECT TRUNC(SYSDATE,'D') FROM DUAL; --返回当前星期的第一天.  SELECT TRUNC(SYSDATE,'DD') FROM DUAL;--返回当前年月日
----  上月最后一天

SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYY/MM/DD') FROM DUAL;


----: 上各月的今天
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL;


---- 上个月第一天

SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),'YYYY-MM-DD') FirstDay FROM DUAL;


---  按照每周进行统计

SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;


---  按照每月进行统计

SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;


----  按照每季度进行统计

SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;

---  按照每年进行统计

SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL;


---  要找到某月中所有周五的具体日期 

SELECT TO_CHAR(T.D, 'YY-MM-DD')
FROM
(
    SELECT TRUNC(SYSDATE, 'MM') + ROWNUM -1 AS D
    FROM DBA_OBJECTS
    WHERE ROWNUM < 32
) T
WHERE TO_CHAR(T.D, 'MM') = TO_CHAR(SYSDATE, 'MM')
    AND TRIM(TO_CHAR(T.D, 'DAY')) = '星期五'


下面的内容应该属于格式化函数,但是为了对日期函数做详细叙述,就把TO_CHAR的内容放到这里了

Y或YY或YYY 年的最后一位,两位或三位  
SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;

SYEAR或YEAR SYEAR使公元前的年份前加一负号
SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL;    --TWENTY ELEVEN


Q 季度,1~3月为第一季度 
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;        -- 2表示第二季度

MM 月份数 
SELECT  TO_CHAR(SYSDATE, 'MM') FROM DUAL;      --04表示4月 

RM 月份的罗马表示 
SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL;       --IV表示4月 

Month 用9个字符长度表示的月份名 
SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL;    -- 4月 

WW 当年第几周 
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;       -- 24表示2002年6月13日为第24周 

W 本月第几周 
SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL;        -- 2011年04月26日为第4周 

DDD 当年第几天. 1月1日为001,2月1日为032 
SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;

DD 当月第几天 
SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;

D 周内第几天 
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;

DY 周内第几天缩写 
SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;

HH或HH12 12进制小时数
SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;

HH24 24小时制 
SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;

MI 分钟数(059) 
SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

SS 秒数(059) 
SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;
 
--------------------------------------------------------------------------------------

在csdn找到别人提出的一个加减日期的方法

用select to_date('2014-02-28','yyyy-mm-dd')+numtoyminterval(1,'year') from dual;

numtoyminterval函数——数字转换函数
  语法:NUMTOYMINTERVAL ( n , 'char_expr' )
              char_expr:日期描述,可以是YEAR和MONTH;
  作用:可以将数字转换成相应的日期单位时间
  比如:NUMTOYMINTERVAL ( 1, 'MONTH' ) 表示一个月
        NUMTOYMINTERVAL ( 1, 'YEAR' ) 表示一年
        NUMTODSINTERVAL( 1, 'day' ) 表示一天
   通常当我们使用add_month添加月时,如果输入是本月月底的日期,那么得到的也是月底的日期,比如add_month(to_date('2007-02-28','yyyy-mm-dd'),1)得到的就会是'2007-03-31',而不是'2007-03-28'。
        此时,如果使用的是to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'),那么得到的就是'2007-03-28'。   
另外,对于day、hour、minute、second使用的是numtodsinterval函数,方法和numtoyminterval一样。

免责声明:文章转载自《Oracle -&amp;gt;&amp;gt; 日期函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windbg实用手册tag应用如何根据metadata内容杀指定应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TCP/IP网络编程系列之三(初级)

TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值。端口号并非赋予计算机值,而是为了区分程序中创建的套接字而分配给套接字的序号。 网络地址 网络地址分为IPV4和IPV6,分别你别为4个字节地址簇和6个字节地址簇。IPV4标准的4个字...

JAVA 处理时间 java.sql.Date、java.util.Date与数据库中的Date字段的转换方法 转载自:

JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]2007年10月30日 星期二 下午 09:341、如何将java.util.Date转化为java.sql.Date?转化:java.sql.Date sd;java.util.Date ud;//initialize the ud s...

数据对齐

许多计算机系统对数据类型的合法地址做了一些限制,要求某种数据类型对象的地址必须是某个值K(2,4,8)的倍数,这种堆积限制简化形成了处理器和存储器系统之间接口的硬件设计,总之就是为了方便高效的读取数据,于是就有了数据对齐。 struct S1 { char k; double i; char c; }; Sizeof(S1)的...

gcc 编译器参数

一、GCC编译过程 参考:http://hi.baidu.com/zengzhaonong/item/c00e079f500adccab625314f-------------------------------------    Pre-Processing   cpp        预处理    Compiling        ccl       ...

Oracle 时间差计算

两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒): 天: ROUND(TO_NUMBER(END_DATE - START_DATE)) 小时: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24) 分钟: ROUND(TO_NUMBER(END_DA...

string.Format出现异常"输入的字符串格式有误"的解决方法

string.Format出现异常"输入的字符串格式有误"的解决方法 今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报“输入的字符串格式有误”的错误,我调了很久,还是不对,不明白错 在哪里,后来还是google了一下,原来我在字符串中出现了"{"字符。而"{"字符若出现在string.Format中是必需转义的,也就是要用两...