`
tidelee
  • 浏览: 1590 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle_sysdate

阅读更多

        Year:    
        yy two digits 两位年                显示值:07
        yyy three digits 三位年                显示值:007
        yyyy four digits 四位年                显示值:2007
          
        Month:    
        mm    number     两位月              显示值:11
        mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov   
        month spelled out 字符集表示          显示值:11月,若是英文版,显示november
        
        Day:    
        dd    number         当月第几天        显示值:02
        ddd    number         当年第几天        显示值:02
        dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri
        day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday      
        ddspth spelled out, ordinal twelfth
           
              Hour:
              hh    two digits 12小时进制            显示值:01
              hh24 two digits 24小时进制            显示值:13
            
              Minute:
              mi    two digits 60进制                显示值:45
            
              Second:
              ss    two digits 60进制                显示值:25
            
              其它
              Q     digit         季度                  显示值:4
              WW    digit         当年第几周            显示值:44
              W    digit          当月第几周            显示值:1
            
        24小时格式下时间范围为: 0:00:00 - 23:59:59....    
        12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
          
1. 日期和字符转换函数用法(to_date,to_char)
       
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年 
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月 
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日 
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时 
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分 
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

  
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')    from dual//

2.    
    select to_char( to_date(222,'J'),'Jsp') from dual    
  
    显示Two Hundred Twenty-Two   

3.求某天是星期几    
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;    
   星期一    
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   
    monday    
   设置日期语言    
   ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';    
   也可以这样    
   TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')   

4. 两个日期间的天数    
    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;   

 

another

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

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

ORACLE日期函数大全!
2009-03-12 14:16:10
日期函数 Oracle PL/SQL Oracle的日期函数相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。

常用日期型函数
1。Sysdate 当前日期和时间
SQL> Select sysdate from dual;

SYSDATE
----------
21-6月 -05

2。Last_day 本月最后一天
SQL> Select last_day(sysdate) from dual;

LAST_DAY(S
----------
30-6月 -05

3。Add_months(d,n) 当前日期d后推n个月
用于从一个日期值增加或减少一些月份
date_value:=add_months(date_value,number_of_months)

SQL> Select add_months(sysdate,2) from dual;

ADD_MONTHS
----------
21-8月 -05

4。Months_between(f,s) 日期f和s间相差月数
SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))from dual;

MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD'))
----------------------------------------------------------
-4.6966741

5。NEXT_DAY(d, day_of_week)
返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。
SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;

NEXT_DAY(T
----------
26-6月 -05

6。current_date()返回当前会话时区中的当前日期
date_value:=current_date
SQL> column sessiontimezone for a15
SQL> select sessiontimezone,current_date from dual;

SESSIONTIMEZONE CURRENT_DA
--------------- ----------
+08:00 13-11月-03

SQL> alter session set time_zone='-11:00' 2 /
会话已更改。

SQL> select sessiontimezone,current_timestamp from dual;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
-11:00 12-11月-03 04.59.13.668000 下午 -11:00

7。current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期
SQL> select current_timestamp from dual;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.13.08.220589 上午 +08:00

8。dbtimezone()返回时区
SQL> select dbtimezone from dual;

DBTIME
------
-08:00

9。extract()找出日期或间隔值的字段值
date_value:=extract(date_field from [datetime_value|interval_value])
SQL> select extract(month from sysdate) "This Month" from dual;

This Month
----------
6

SQL> select extract(year from add_months(sysdate,36)) " Years" from dual;

Years
----------
2008

10。localtimestamp()返回会话中的日期和时间
SQL> select localtimestamp from dual;

LOCALTIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.18.15.855652 上午

常用日期数据格式(该段为摘抄)

Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年
SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年
Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度①
MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月
RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月
Month 用9个字符长度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表示5月
WW 当年第几周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日为第24周
W 本月第几周 Select to_char(sysdate,’W’) from dual; 2002年10月1日为第1周
DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日为第363天
DD 当月第几天 Select to_char(sysdate,’DD’) from dual; 04 10月4日为第4天
D 周内第几天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日为星期一
DY 周内第几天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日为星期天
HH或HH12 12进制小时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02
HH24 24小时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14
MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分
SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒
提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。


现在给出一些实践后的用法:

1。上月末天:
SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from
dual;

LASTDAY
----------
2005-05-31

2。上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;


PRETODAY
----------
2005-05-21

3.上月首天
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;

FIRSTDAY
----------
2005-05-01

4.按照每周进行统计
SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');

TO
--
25

5。按照每月进行统计
SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');

TO
--
06

6。按照每季度进行统计
SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');

T
-
2

7。按照每年进行统计
SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');

TO_C
----
2005

8.要找到某月中所有周五的具体日期
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')) = '星期五'
--------
03-05-02
03-05-09
03-05-16
03-05-23
03-05-30

如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。

9.oracle中时间运算

内容如下:
1、oracle支持对日期进行运算
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号,否则会出问题

SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';

会话已更改。

SQL> set serverout on
SQL> declare
2 DateValue date;
3 begin
4 select sysdate into DateValue from dual;
5 dbms_output.put_line('源时间:'||to_char(DateValue));
6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1));
7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24));
8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60)));
9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*60)));
10 end;
11 /
源时间:2003-12-29 11:53:41
源时间减1天:2003-12-28 11:53:41
源时间减1天1小时:2003-12-28 10:53:41
源时间减1天1小时1分:2003-12-28 10:52:41
源时间减1天1小时1分1秒:2003-12-28 10:52:40

PL/SQL 过程已成功完成。


在Oracle中实现时间相加处理
-- 名称:Add_Times
-- 功能:返回d1与NewTime相加以后的结果,实现时间的相加
-- 说明:对于NewTime中的日期不予考虑
-- 日期:2004-12-07
-- 版本:1.0
-- 作者:Kevin


create or replace function Add_Times(d1 in date,NewTime in date) return date
is
hh number;
mm number;
ss number;
hours number;
dResult date;
begin
-- 下面依次取出时、分、秒
select to_number(to_char(NewTime,'HH24')) into hh from dual;
select to_number(to_char(NewTime,'MI')) into mm from dual;
select to_number(to_char(NewTime,'SS')) into ss from dual;
-- 换算出NewTime中小时总和,在一天的百分几
hours := (hh + (mm / 60) + (ss / 3600))/ 24;
-- 得出时间相加后的结果
select d1 + hours into dResult from dual;
return(dResult);
end Add_Times;


-- 测试用例
-- select Add_Times(sysdate,to_date('2004-12-06 03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual


在Oracle9i中计算时间差
计算时间差是Oracle DATA数据类型的一个常见问题。Oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。


一旦你发现了时间差异,你可以使用简单的技巧来以天、小时、分钟或者秒为单位来计算时间差。为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏。

使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法。

round(to_number(end-date-start_date))- 消逝的时间(以天为单位)

round(to_number(end-date-start_date)*24)- 消逝的时间(以小时为单位)

round(to_number(end-date-start_date)*1440)- 消逝的时间(以分钟为单位)

显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的SQL *Plus查询。

SQL> select sysdate-(sysdate-3) from dual;

SYSDATE-(SYSDATE-3)
-------------------
3

这里,我们看到了Oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。

Select
(sysdate-(sysdate-3.111))*1440
from
dual;

(SYSDATE-(SYSDATE-3.111))*1440
------------------------------
4479.83333

当然,我们可以用ROUND函数(即取整函数)来解决这个问题,但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型。

Select
round(to_number(sysdate-(sysdate-3.111))*1440)
from
dual;

ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440)
----------------------------------------------
4480

我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中。在这个例子里,我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个Oracle STATSPACK USER_LOG扩展表格之中。

Update
perfstat.stats$user_log
set
elapsed_minutes =
round(to_number(logoff_time-logon_time)*1440)
where
user = user_id
and
elapsed_minutes is NULL;

查出任一年月所含的工作日
CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR2
) RETURN INTEGER IS
/*------------------------------------------------------------------------------------------
函数名称:Get_WorkingDays
中文名称:求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间: 2004-05-22
输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405
返 回 值:整型值,包含的工作日数目。
算法描述:
1).列举出参数给出的年月中的每一天。这里使用了一个表(ljrq是我的库中的一张表。这个表可以是有权访问的、记录条数至少为31的任意一张表或视图)来构造出某年月的每一天。
2).用这些日期和一个已知星期几的日期相减(2001-12-30是星期天),所得的差再对7求模。如果所求年月在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模.
3).过滤掉结果集中值为0和6的元素,然后求count,所得即为工作日数目。
-------------------------------------------------------------------------------------------------*/
Result INTEGER;
BEGIN
SELECT COUNT(*) INTO Result
FROM (SELECT MOD(MOD(q.rq-to_date('2001-12-30','yyyy-mm-dd'),7),7) weekday
FROM ( SELECT to_date(ny||t.dd,'yyyymmdd') rq
FROM (SELECT substr(100+ROWNUM,2,2) dd
FROM ljrq z WHERE Rownum<=31
) t
WHERE to_date(ny||t.dd,'yyyymmdd')
BETWEEN to_date(ny,'yyyymm')
AND last_day(to_date(ny,'yyyymm'))
)q
) a
WHERE a.weekday NOT IN(0,6);
RETURN Result;
END Get_WorkingDays;

______________________________________

还有一个版本
CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR2
) RETURN INTEGER IS
/*-----------------------------------------------------------------------------------------
函数名称:Get_WorkingDays
中文名称:求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间: 2004-05-23
输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405
返 回 值:整型值,包含的工作日数目。
算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天与一个已知是星期天的日期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。
----------------------------------------------------------------------------------------*/
Result INTEGER := 0;
myts INTEGER; --所给年月的天数
scts INTEGER; --某天距2001-12-30所差的天数
rq DATE;
djt INTEGER := 1; --
BEGIN
myts := to_char(last_day(to_date(ny,'yyyymm')),'dd');
LOOP
rq := TO_date(ny||substr(100+djt,2),'yyyymmdd');
scts := rq - to_date('2001-12-30','yyyy-mm-dd');
IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN
Result := Result + 1;
END IF;
djt := djt + 1;
EXIT WHEN djt>myts;
END LOOP;
RETURN Result;
END Get_WorkingDays;

以上两个版本的比较

第一个版本一条SQL语句就可以得出结果,不需要编程就可以达到目的。但需要使用任意一张有权访问的、记录条数至少为31的一张表或视图。
第二个版本需要编程,但不需要表或者视图。
这两个版本都还存在需要完善的地方,即没有考虑节日,如五一、十一、元旦、春节这些节假期都没有去除。这些节假日应该维护成一张表,然后通过查表来去除这些节假日。

5. 时间为null的用法    
   select id, active_date from table1    
   UNION    
   select 1, TO_DATE(null) from dual;    
 
   注意要用TO_DATE(null)   

6.月份差 
   a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')   
    那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。    
   所以,当时间需要精确的时候,觉得to_char还是必要的
    
7. 日期格式冲突问题    
    输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'    
    alter system set NLS_DATE_LANGUAGE = American    
    alter session set NLS_DATE_LANGUAGE = American    
    或者在to_date中写    
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   
     注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,    
    可查看    
    select * from nls_session_parameters    
    select * from V$NLS_PARAMETERS   

8.    
   select count(*)    
   from ( select rownum-1 rnum    
       from all_objects    
       where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-    
       02-01','yyyy-mm-dd')+1    
      )    
   where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )    
        not in ( '1', '7' )    
 
   查找2002-02-28至2002-02-01间除星期一和七的天数    
   在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).   

9. 查找月份   
    select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   
     1    
   select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   
     1.03225806451613
     
10. Next_day的用法    
    Next_day(date, day)    
  
    Monday-Sunday, for format code DAY    
    Mon-Sun, for format code DY    
    1-7, for format code D   

11    
   select to_char(sysdate,'hh:mi:ss') TIME from all_objects    
   注意:第一条记录的TIME 与最后一行是一样的    
   可以建立一个函数来处理这个问题    
   create or replace function sys_date return date is    
   begin    
   return sysdate;    
   end;    
 
   select to_char(sys_date,'hh:mi:ss') from all_objects; 
   
12.获得小时数    
     extract()找出日期或间隔值的字段值
    SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer    
    SQL> select sysdate ,to_char(sysdate,'hh') from dual;    
  
    SYSDATE TO_CHAR(SYSDATE,'HH')    
    -------------------- ---------------------    
    2003-10-13 19:35:21 07    
  
    SQL> select sysdate ,to_char(sysdate,'hh24') from dual;    
  
    SYSDATE TO_CHAR(SYSDATE,'HH24')    
    -------------------- -----------------------    
    2003-10-13 19:35:21 19   

     
13.年月日的处理    
   select older_date,    
       newer_date,    
       years,    
       months,    
       abs(    
        trunc(    
         newer_date-    
         add_months( older_date,years*12+months )    
        )    
       ) days
     
   from ( select    
        trunc(months_between( newer_date, older_date )/12) YEARS,    
        mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,    
        newer_date,    
        older_date    
        from (
              select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date   
               from emp
             )    
      )   

14.处理月份天数不定的办法    
   select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual  

16.找出今年的天数    
   select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual  

   闰年的处理方法    
   to_char( last_day( to_date('02'    | | :year,'mmyyyy') ), 'dd' )    
   如果是28就不是闰年   

17.yyyy与rrrr的区别    
   'YYYY99 TO_C    
   ------- ----    
   yyyy 99 0099    
   rrrr 99 1999    
   yyyy 01 0001    
   rrrr 01 2001   

18.不同时区的处理    
   select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate   
    from dual;   

19.5秒钟一个间隔    
   Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')   
    from dual   

   2002-11-1 9:55:00 35786    
   SSSSS表示5位秒数   

20.一年的第几天    
   select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
      
   310 2002-11-6 10:03:51   

21.计算小时,分,秒,毫秒    
    select    
     Days,    
     A,    
     TRUNC(A*24) Hours,    
     TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,    
     TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,    
     TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds    
    from    
    (    
     select    
     trunc(sysdate) Days,    
     sysdate - trunc(sysdate) A    
     from dual    
   )   


   select * from tabname    
   order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');    
 
   //    
   floor((date2-date1) /365) 作为年    
   floor((date2-date1, 365) /30) 作为月    
   d(mod(date2-date1, 365), 30)作为日.

23.next_day函数      返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
   next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。    
   1 2 3 4 5 6 7    
   日 一 二 三 四 五 六  
 
   ---------------------------------------------------------------
 
   select    (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
    日期 返回的是天 然后 转换为ss
   
24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
   select sysdate S1,
   round(sysdate) S2 ,
   round(sysdate,'year') YEAR,
   round(sysdate,'month') MONTH ,
   round(sysdate,'day') DAY from dual

25,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
   select sysdate S1,                   
     trunc(sysdate) S2,                 //返回当前日期,无时分秒
     trunc(sysdate,'year') YEAR,        //返回当前年的1月1日,无时分秒
     trunc(sysdate,'month') MONTH ,     //返回当前月的1日,无时分秒
     trunc(sysdate,'day') DAY           //返回当前星期的星期天,无时分秒
   from dual

26,返回日期列表中最晚日期
   select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

27.计算时间差
     注:oracle时间差是以天数为单位,所以换算成年月,日
   
      select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual        //时间差-年
       select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual        //时间差-月
       select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual             //时间差-天
       select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual         //时间差-时
       select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual    //时间差-分
       select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒

28.更新时间
     注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日
     select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual        //改变时间-年
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual                                 //改变时间-月
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual            //改变时间-日
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual         //改变时间-时
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual      //改变时间-分
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual   //改变时间-秒

29.查找月的第一天,最后一天
     SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
       Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
       Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
       LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
   FROM dual;

 

分享到:
评论

相关推荐

    oracle_triger.rar_oracle_oracle trig_oracle triger_triger oracle

    :new.hire_date := SYSDATE; END emp_insert_trigger; ``` 这个触发器会在尝试插入新员工记录且`hire_date`为空时,自动设置为当前系统日期。 6. **使用触发器的注意事项** - 触发器可能导致性能下降,因为...

    Oracle_to_date

    ### Oracle_to_date:Oracle数据库中的日期格式转换 在Oracle数据库中,`TO_DATE`函数是处理日期和时间数据的关键工具之一。它主要用于将字符串转换为日期格式,这在实际的数据处理过程中非常常见,尤其是在需要对...

    oracle-function--api.zip_oracle_oracle API_oracle sql api

    1. `sysdate`:当前系统日期和时间。 2. `to_date(date_str, format)`:将字符串转换为日期。 3. `to_char(date, format)`:将日期转换为字符串。 4. `add_months(date, months)`:在日期上增加指定的月数。 5. `...

    oracle_date.rar_oracle

    在Oracle中,日期处理涉及一系列函数和操作,如SYSDATE获取当前系统日期,ADD_MONTHS用于增加或减少月份,EXTRACT函数用于提取日期或时间的特定部分(如年、月、日、小时、分钟等)。TO_CHAR和TO_DATE函数则用于日期...

    oracle_日期_加减方法

    在Oracle数据库中,日期操作是常见的SQL查询任务,特别是在处理历史数据或进行时间相关的分析时。Oracle提供了丰富的函数来帮助用户对日期进行加减操作,这些功能强大且灵活的函数使得开发者能更精确地处理时间数据...

    Oracle_function.zip_oracle

    - **日期时间函数**:`SYSDATE`获取当前系统日期,`ADD_MONTHS()`增加指定月数,`TO_CHAR()`将日期转换为字符串格式。 - **转换函数**:`TO_DATE()`和`TO_NUMBER()`分别将字符串转换为日期和数字。 - **数学函数*...

    Oracle_SQL_function.rar_oracle

    1. SYSDATE:返回当前系统的日期和时间。 2. ADD_MONTHS(date, months):在给定日期上增加指定的月数。 3. NEXT_DAY(date, day_of_week):返回date之后的第一个指定星期几的日期。 三、数学函数 1. ROUND(value, ...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以支持复杂的查询和数据操作。这份"oracle函数大全(分类显示).zip"压缩包显然是一份详细的Oracle函数参考手册,对于初学者而言,是一个...

    oracle_xuexibiji.rar_oracle

    这可能包括日期函数(如SYSDATE获取当前系统日期,ADD_MONTHS增加月份),字符串函数(如SUBSTR截取子串,INSTR查找子串位置),数学函数(如ROUND四舍五入,MOD取模),转换函数(如TO_CHAR将数值转为字符串,TO_...

    TX_CON_0088_oracle_oracle存储过程实战_

    在Oracle数据库系统中,存储过程是一种预编译的SQL和PL/SQL代码集合,它可以封装一系列复杂的数据库操作,便于重复使用和提高效率。"TX_CON_0088_oracle_oracle存储过程实战_"这个主题深入探讨了如何在实际环境中...

    oracle_函数介绍

    ### Oracle函数介绍(一):著名函数之单值 在Oracle数据库系统中,函数是非常重要的组成部分,它们提供了强大的数据处理能力。本篇文章将详细介绍Oracle中的一些著名单值函数及其应用场景。 #### 一、概述 ...

    ORACLE_JOB_.rar_oracle

    在Oracle数据库系统中,"JOB" 是一个非常重要的概念,它允许用户在预定义的时间执行一系列的数据库操作,如数据加载、备份、清理任务等。本文将深入探讨Oracle中的Jobs,包括它们的工作原理、创建方法、调度以及管理...

    insert_date.rar_oracle_pro *c insert

    例如,`SYSDATE`是一个内置的函数,返回当前系统的日期和时间。 描述中提到“PRO*c, ORACLE datebase”,这进一步确认了主题是关于使用Pro*C访问Oracle数据库,特别是与日期相关的操作。在Pro*C中,可以使用SQL语句...

    java_oracle_day02.pdf

    根据给定的文件信息,以下是对“java_oracle_day02.pdf”中涉及的主要知识点的详细解析: ### 单行函数的使用 单行函数是在处理数据库查询时,对每一行的数据只返回一个值的函数。这类函数可以用于对特定列进行...

    oracle_job的创建更改及删除

    "Oracle Job 创建、更改和删除" Oracle Job 是一种自动执行任务的机制,允许数据库管理员创建、更改和删除作业以实现自动执行任务。本文将对 Oracle Job 的创建、更改和删除进行详细的介绍。 创建作业 创建作业...

    oracle_OCP-051答案解析

    根据提供的信息,我们可以深入探讨Oracle OCP-051题目中的知识点及相关解析。该题目主要涉及Oracle数据库中的CREATE TABLE AS SELECT语句、默认值、NOT NULL约束以及外键约束等核心概念。 ### 标题与描述解读 标题...

    oracle_job.doc

    Oracle Job 是 Oracle 数据库中的一个强大特性,允许管理员设置定时任务来自动化数据库操作。Job 可以执行 PL/SQL 代码块、存储过程或其他数据库维护任务。以下是对 Oracle Job 使用和配置的详细说明: 1. **Job ...

    Oracle-SQL-function.rar_oracle_oracle ppt

    - `SYSDATE`: 返回当前系统日期和时间。 - `ADD_MONTHS()`: 在日期上增加指定的月数。 - `EXTRACT()`: 从日期/时间值中提取部分,如年、月、日等。 - `TRUNC()`: 截断日期到指定的部分,如年、月、日。 5. **...

    oracle_sql_函数_语法_集合

    3. **日期和时间函数**:如`SYSDATE`返回当前系统日期,`ADD_MONTHS()`添加指定月份数,`EXTRACT()`用于从日期时间值中提取部分,如年、月、日等。 4. **转换函数**:`TO_CHAR()`将数值转换为字符串,`TO_DATE()`将...

Global site tag (gtag.js) - Google Analytics