DATE 是把字符串转换为数据库中得日期类型转换函数,首先数据是存在oracle数据库里面的

需要从四张不同的数据库表当中取数据,首先数据是存在oracle数据库里面的,CHAR 是把日期或数字转换为字符串,DATE 是把字符串转换为数据库中得日期类型转换函数,07,date ( ‘2007-12-20 18,2007-12-20 18,查看后发现原来是Oracle数据源异常,上个月今天就是4月31号

OR B.PARAMETERNAME=’MEMORY’


  1. 多少个日中间的运气     
    select floor(sysdate – to_date(‘20020405′,’yyyymmdd’)) from dual;    

  2. 时间为null的用法     
    select id, active_date from table1     
    UNION     
    select 1, TO_DATE(null) from dual;     
    留心要用TO_DATE(null)    

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

Oracle扩展、收缩岁月段

and TO_DATE(‘1970-01-01′,’yyyy-mm-dd’) +
trunc(C.TIMESTAMP/(1000*60*60*24))<=TO_DATE(‘[?end|2008-04-12?]’,’yyyy-mm-dd’)

*   那么九月31号中午12点过后和11月1号的12点以前是不分包在这里个范围以内的。*

SYSDATE TO_CHAR(SYSDATE,’HH’)     

———————     
2003-10-13
19:35:21 07     
SQL> select sysdate
,to_char(sysdate,’hh24′) from dual;     

14.甩卖月份天数不定的法子      
select to_char(add_months(last_day(sysdate) +1, -2),
‘yyyymmdd’),last_day(sysdate) from dual    


where TO_DATE(‘1970-01-01′,’yyyy-mm-dd’) +
trunc(C.TIMESTAMP/(1000*60*60*24))>=TO_DATE(‘[?start|2008-04-05?]’,’yyyy-mm-dd’)

        day spelled out 当周第几天全写
突显值:礼拜四,如若加泰罗尼亚语版,显示friday

  1. 日子格式冲突难点     
    输入的格式要看你安装的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    

27.划算时间差
注:oracle时间差是以天数为单位,所以换算成年月,日

  1. 日期格式冲突难点
    输入的格式要看你安装的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

  2. 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’ )

并且鉴于数量库表并不算不错,也便是要要做那些表,供给从四张分歧的数据库表在这之中取数据。作者埋头查了遥远,才算把那几个SQL化解,进献出来给大家享受一下。

* 
  *

  1. 查找月份    
    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
          
  2. Next_day的用法     
    Next_day(date, day)     
    Monday-Sunday, for format code DAY     
    Mon-Sun, for format code DY     
    1-7,
    for format code D    

Second:
ss    two digits 60进制                显示值:25

2003-10-13 19:35:21 19

日期型的标题一蹴即至了,然后又有八个严重的难点冒出来了,数据量太大,在PL/SQL里面执行,都急需花超过生机勃勃钟头的时日,那些一定是不可能令人担任的。小编只得又埋头商量SQL优化,当当当当,成功的把推行时间降至了0.47秒!

1.在使用Oracle的to_date函数来做日期调换时,恐怕会直觉地使用“yyyy-MM-dd
HH:mm:ss”的格式作为格式进行转移,不过在Oracle中会引起错误:“ORA 01810
格式代码出现三遍”。如:select to_date(‘二〇〇六-01-01 13:14:20’,’yyyy-MM-dd
HH24:mm:ss’卡塔尔 from
dual;原因是SQL中不区分朗朗上口写,MM和mm被感到是相似的格式代码,所以Oracle的SQL选拔了mi取代分钟。select
to_date(‘2005-01-01 13:14:20′,’yyyy-MM-dd HH24:mi:ss’) from dual;

Minute:
mi    two digits 60进制                显示值:45

select to_char(sys_date,’hh:mi:ss’) from all_objects;   

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

     (select
* from A where HOST='[?HOST|SERVER6?]’) A inner join D D on A.GUID =
D.HOST

              Q digit 季度 显示值:4

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’)    

Monday-Sunday, for format code DAY      
Mon-Sun, for format code DY      
1-7, for format code
D    

SYSDATE TO_CHAR(SYSDATE,’HH’)

**   order
by
decode(mode,’FIFO’,1,-1)*to_char(rq,’yyyymmddhh24miss’);**

    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’ )     
查找二〇〇一-02-28至二〇〇一-02-01间除星期四和七的大运     
在上下分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(获得的是1/100秒, 并非皮秒State of Qatar.    

6.月份差   
a_date between to_date(‘20011201′,’yyyymmdd’) and
to_date(‘20011231′,’yyyymmdd’)      
那么十1月31号深夜12点之后和二月1号的12点事情发生在此之前是不含有在此个界定以内的。      
故而,那个时候间须要标准的时候,感觉to_char仍然必不可缺的 

17.yyyy与rrrr的区别
‘YYYY99 TO_C

具体如何是好,就相当少说了,他们家软件的扶植文档写的挺详细的。风乐趣的能够到他俩网址down一个拜候。地址:www.finereport.com

***   floor((date2-date1,
365) /30)
作为月***

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

18.区别时区的管理      
select to_char( NEW_TIME( sysdate, ‘GMT’,’EST’), ‘dd/mm/yyyy
hh:mi:ss’) ,sysdate      
from dual;    

再收拾下时间相关的Oracle函数

     A.HOST as
HOST,

  1. 三个日之间的运气*

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;   //获取时间的秒

SYSDATE TO_CHAR(SYSDATE,’HH24′)      
——————– ———————–      
2003-10-13 19:35:21
19    

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
d(mod(date2-date1, 365), 30)作为日.

恍如轻便,也便是一张报表个中放置了四个图表。但实际上由于数据库的单表数据量近亿,直接取多少差不离是不或者的。

   设置日期语言

6.月份差  
a_date between to_date(‘20011201′,’yyyymmdd’) and to_date(‘20011231′,’yyyymmdd’)     
那便是说6月31号早上12点以后和1月1号的12点事情发生在此以前是不包括在这里个节制之内的。     
进而,那个时候间须求标准的时候,认为to_char依旧必不可缺的
     

12.收获小时数      
extract(State of Qatar寻觅日期或间距值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP ‘2001-02-16 2:38:40’) from
offer      
SQL> select sysdate ,to_char(sysdate,’hh’) from dual;      

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

兼备的艺术就从不什么样难度好说了,因为自个儿用的FineReport,做这么些表格正是小菜风流倜傥碟了。直接把刚刚定义好的列拖过来,二个钟头,多个日子,几个日子字段分别放置B3C3格子里面。左侧奥迪A6到A8手工业写上指标名字只怕将Curry面包车型地铁目的名字拖来,中间拖数据恢复生机。就OK。
然后直接插入图表,选拔好数据区域就能够了。Just like
excel~

***      select
floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03′,’yyyy-mm-dd
hh24:mi:ss’))) as spanDays from dual
//时间差-天***

8.     
select

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;      

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 new提姆e from
dual //改动时间-日
select to_char(sysdate,’yyyy-mm-dd
hh24:mi:ss’),to_char(sysdate+n/24,’yyyy-mm-dd hh24:mi:ss’State of Qatar 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’State of Qatar 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’State of Qatar as
new提姆e from dual //退换时间-秒

OR B.PARAMETERNAME=’IO’


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      

SQL> select sysdate ,to_char(sysdate,’hh24′) from dual;

如何是好吧,google,baidu了大多,都还没找到答案,什么人让本人不懂什么SQL呢,书到经过不知难!

HH24:MI:SS AM 15:43:20 PM

TO_DATE格式(以时间:2007-11-02   13:45:25为例)
Year:
yy  两位年          显示值:07
yyy  三位年         显示值:007
yyyy  四位年        显示值:2007
           
Month:     
mm    number     两位月              显示值:11
mon    abbreviated 字符集表示         展现值:十二月,若是英语版,展现nov    
month spelled out 字符集表示          展现值:六月,借使保加马拉加语版,显示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

   闰年的拍卖情势      
to_char( last_day( to_date(’02’    | | :year,’mmyyyy’) ), ‘dd’
)      
若是是28就不是闰年    

20.一年的第几天
select TO_CHAR(SYSDATE,’DDD’),sysdate from dual

     Inner
join (select * from B where B.PARAMETERNAME=’CPU’

*    alter system set
NLS_DATE_LANGUAGE = American*

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(State of Qatar找寻日期或间距值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP ‘2001-02-16 2:38:40’) from offer     
SQL> select sysdate
,to_char(sysdate,’hh’) from dual;     

当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。 
生机勃勃旦输入的日期数据忽视时间某个,Oracle会将时、分、秒部分都置为0,也便是说会取整到日。 
同样,忽视了DD参数,Oracle会接收1当作日的默认值,也便是说会取整到月。 
只是,不要被这种“惯性”所迷惑,假如忽视MM参数,Oracle并不会取整到年,而是取整到当前月

  1. 日期和字符调换函数用法(to_date,to_char)

OR B.PARAMETERNAME=’FSPERCENT’

*   Select
TO_DATE(FLOOR(TO_CHAR(sysdate,’SSSSS’)/300) * 300,’SSSSS’)
,TO_CHAR(sysdate,’SSSSS’)*

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,        //再次来到当二零一七年的3月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;

出自为知笔记(Wiz卡塔尔(قطر‎

INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-20 18:31:34’ ,
‘YYYY-MM-DD HH24:MI:SS’ ) ) ; 
询问展现:二零零七-12-20 18:31:34.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-14 14:10’ ,
‘YYYY-MM-DD HH24:MI’ ) ); 
询问呈现:二零零五-12-14 14:10:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-14 14’ , ‘YYYY-MM-DD
HH24’ ) ); 
询问展现:二零零六-12-14 14:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-11-15’ , ‘YYYY-MM-DD’ )
); 
查询显示:二零零五-11-15 00:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-09’ , ‘YYYY-MM’ )
); 
询问显示:二零零六-09-01 00:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007’ , ‘YYYY’ ) ); 
查询展现:2006-05-01 00:00:00.0 
——————- 

Minute:
mi two digits 60进制 显示值:45

必然要把笔者利用的询问关键词写出来,方便现在哪位兄弟用相仿的基本点词,最少能搜到作者那几个答案啊。“纳秒转变为时间”。当然大家肯定也看看了,作者转载的办法正是TO_DATE(‘1970-01-01′,’yyyy-mm-dd’) +
trunc(C.TIMESTAMP/(1000*60*60*24))和TO_CHAR(TO_DATE(‘1970-01-01′,’yyyy-mm-dd hh24:mi:ss’) +
C.TIMESTAMP/(1000*60*60*24卡塔尔国,’yyyy-mm-dd
hh24:mi:ss’卡塔尔(قطر‎,12,2State of Qatar,那三头的差距便是,前面三个只取年月日,前者则将小时分秒都抽出来。

  • 100*TRUNC(A*24*60*60))
    mSeconds***

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’)    

到集团察觉有四个表格未有采用,查看后意识原先是Oracle数据源分外。

 

**   select
add_months(trunc(sysdate,’year’), 12) – trunc(sysdate,’year’) from
dual**

  1. 日子和字符转变函数用法(to_date,to_char)

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’)

     据悉小车的表达是因为人懒得走路,那么笔者这种懒人,会不会推动软件越来越人性化呢?答案自然是。所以,正是说,笔者用的FineReport,是能够这么的。报表里面有啥参数,作者只要求把它定位贰个职位,访谈报表的时候,就能够直接弹出或然有个内嵌的参数查询框子了。溜个图:

*   select 1, TO_DATE(null) from
dual;*

————————————————————— 

TO_DATE格式(以时间:2007-11-02 13:45:25为例)

    
TO_NUMBER(C.VALUE) as VALUE

21.测算时辰,分,秒,纳秒**

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,nState of Qataras 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   //改动时间-秒

上面这一个sql求上个月明天和今日。平日意况下不会报错。

from

              ss two digits 60进制 显示值:25

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

14.甩卖月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2),
‘yyyymmdd’),last_day(sysdate) from dual

图片 1

**       from
all_objects**

Month:      
mm    number     两位月              显示值:11
mon    abbreviated 字符集表示         
展现值:十一月,假使丹麦语版,展现nov     
month spelled out 字符集表示         
显示值:五月,若是斯洛伐克语版,呈现november 

其它
Q digit 季度 显示值:4
WW digit 当年第几周 显示值:44
W digit 前段时期第几周 突显值:1

    
TO_DATE(‘1970-01-01′,’yyyy-mm-dd’) +
trunc(C.TIMESTAMP/(1000*60*60*24)) as DATES,

    显示Two Hundred Twenty-Two

Minute:
mi    two digits 60进制                显示值:45

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’State of Qatar as nowHour from dual; //获取时间的时
select to_char(sysdate,’mi’卡塔尔 as nowMinute from dual; //获取时间的分
select to_char(sysdate,’ss’卡塔尔(قطر‎ as nowSecond from dual; //获取时间的秒

重视的优化措施,正是把where条件,超过二分一放置inner join这里去做。说到来实在挺轻便,是吗。


  1. 日期格式矛盾难题      
    输入的格式要看你安装的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    
  1. 多少个日中间的气数
    select floor(sysdate – to_date(‘20020405′,’yyyymmdd’)) from dual;

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

图片 2

**    ——————–

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;

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 //时间差-秒

 最终一点,在前方的SQL里面作者想我们都看出了,那些表格是有参数的。对那太经常然而了,好像每一张报表都会一时光参数的,未有些许人会说,笔者随便时间,只总结全数的结果吧。在此以前用别的工具的时候,有参数的表格,都需求通过投机手写一些JSP可能什么别的的,在页面里面把参数查询的边框弄出来。

**   return
sysdate;**

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

26,重临日期列表中最迟日期
select greatest(’01-1月-04′,’04-1月-04′,’10-2月-04′) from dual

接下来还会有叁个图是磁盘的忙率比率,以至文件系统的平均可用空间。

**              from
emp**

SYSDATE TO_CHAR(SYSDATE,’HH’)      
——————– ———————      
2003-10-13 19:35:21 07      

加法
select sysdate,add_months(sysdate,12) from dual; –加1年
select sysdate,add_months(sysdate,1) from dual; –加1月
select sysdate,to_char(sysdate+7,’yyyy-mm-dd HH24:MI:SS’) from dual;
–加1星期
select sysdate,to_char(sysdate+1,’yyyy-mm-dd HH24:MI:SS’) from dual;
–加1天
select sysdate,to_char(sysdate+1/24,’yyyy-mm-dd HH24:MI:SS’) from dual;
–加1小时
select sysdate,to_char(sysdate+1/24/60,’yyyy-mm-dd HH24:MI:SS’) from
dual; –加1分钟
select sysdate,to_char(sysdate+1/24/60/60,’yyyy-mm-dd HH24:MI:SS’) from
dual; –加1秒
减法
select sysdate,add_months(sysdate,-12) from dual; –减1年
select sysdate,add_months(sysdate,-1) from dual; –减1月
select sysdate,to_char(sysdate-7,’yyyy-mm-dd HH24:MI:SS’) from dual;
–减1星期
select sysdate,to_char(sysdate-1,’yyyy-mm-dd HH24:MI:SS’) from dual;
–减1天
select sysdate,to_char(sysdate-1/24,’yyyy-mm-dd HH24:MI:SS’) from dual;
–减1小时
select sysdate,to_char(sysdate-1/24/60,’yyyy-mm-dd HH24:MI:SS’) from
dual; –减1分钟
select sysdate,to_char(sysdate-1/24/60/60,’yyyy-mm-dd HH24:MI:SS’) from
dual; –减1秒

Select

***转:

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’ )      

Day:
dd number 前些日子第几天 展现值:02
ddd number 当年第几天 突显值:02
dy abbreviated 当周第几天简写 彰显值:星期二,要是爱尔兰语版,展现fri
day spelled out 当周第几天全写 展现值:星期一,若是菲律宾语版,展现friday
ddspth spelled out, ordinal twelfth

SUBSTR(TO_CHAR(TO_DATE(‘1970-01-01′,’yyyy-mm-dd
hh24:mi:ss’) + C.TIMESTAMP/(1000*60*60*24),’yyyy-mm-dd
hh24:mi:ss’),12,2) as HOURS,

SELECT TO_DATE(‘2006-05’, ‘YYYY-MM’) FROM DUAL

19.5分钟三个间距      
Select TO_DATE(FLOOR(TO_CHAR(sysdate,’SSSSS’)/300) * 300,’SSSSS’)
,TO_CHAR(sysdate,’SSSSS’)      
from dual    

  1. 查找月份
    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

  2. Next_day的用法
    Next_day(date, day)

那是三个广阔的能够权衡生龙活虎台机器的无暇程度的报表。

*   
   —————————————————————*

往Oracle数据库中插入日期型数据(to_date的用法) 

INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-20 18:31:34’ , ‘YYYY-MM-DD HH24:MI:SS’ ) ) ; 
查询显示:2007-12-20 18:31:34.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-14 14:10’ , ‘YYYY-MM-DD HH24:MI’ ) ); 
查询显示:2007-12-14 14:10:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-12-14 14’ , ‘YYYY-MM-DD HH24’ ) ); 
查询显示:2007-12-14 14:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-11-15’ , ‘YYYY-MM-DD’ ) ); 
查询显示:2007-11-15 00:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007-09’ , ‘YYYY-MM’ ) ); 
查询显示:2007-09-01 00:00:00.0 
——————- 
INSERT  INTO  FLOOR  VALUES  ( to_date ( ‘2007’ , ‘YYYY’ ) ); 
查询显示:2007-05-01 00:00:00.0 
——————- 

当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。 
如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。 
同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。 
但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,而是取整到当前月

 

TO_DATE格式(以时间:2007-11-02   13:45:25为例)

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;    

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;

留意要用TO_DATE(null)

在此个SQL里面,首先数据是存在oracle数据库里面包车型客车,作者直面的首先个难题,便是数据库个中存款和储蓄的时间都以时间戳,也正是离开1966年十七月1号零点的皮秒数。必要将其转会为大家常用的yyyy-MM-dd格式。作者一点感到到正是应该用to_date函数。不过独有叁个to_date就像是是不可能到位通透到底的转会。

select to_char(sysdate,’dd’卡塔尔(قطر‎ as nowDay from dual; //获取时间的日

TO_DATE格式(以时间:2007-11-02   13:45:25为例)

  1. select to_char( to_date(222,’J’),’Jsp’) from dual

OR B.PARAMETERNAME=’DSKBUSY’

DAY 星期的全拼

24钟头格式下时限为: 0:00:00 – 23:59:59….      
12钟头格式下时间约束为: 1:00:00 – 12:59:59 …. 

查找了下网上的答案,使用add_months函数校正之。

    
B.PARAMETER.NAME as PARAMETER,

日期表达:

select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’State of Qatar as nowTime from dual;  
//日期转化为字符串   
select to_char(sysdate,’yyyy’State of Qatar 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;  
//获取时间的秒

追寻二零零四-02-28至二〇〇四-02-01间除星期五和七的造化
在内外分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒,
并不是微秒卡塔尔国.

不过自个儿只能每每贰次,笔者比较懒,不赏识什么都要本身写(当然写上边十二分SQL,笔者也嫌麻烦,但是不能呀,何人让数据量大呢,连Oracle自个儿询问都会out of memory)。假设参数可以透过拖拖拽拽,访谈报表时候就自行会有与此相类似三个参数页面,该多好。

 

//      
floor((date2-date1) /365) 作为年      
floor((date2-date1, 365) /30) 作为月      
d(mod(date2-date1, 365), 30)作为日.

19.5分钟二个间距
Select TO_DATE(FLOOR(TO_CHAR(sysdate,’SSSSS’)/300) * 300,’SSSSS’)
,TO_CHAR(sysdate,’SSSSS’)
from dual

OR B.PARAMETERNAME=’FSSpace’)) B on D.GUID =
B.APPLICATION inner join C C on B.GUID = C.AGENT

**    alter session set
NLS_DATE_LANGUAGE = American**

   select * from tabname      
order by
decode(mode,’FIFO’,1,-1)*to_char(rq,’yyyymmddhh24miss’);      

2003-10-13 19:35:21 07

自然,这几个表要彰显的图样,当然可以不用拖拽数据到报表里面,直接写SQL做图表了。但是,小编比较懒,不想写4次SQL,所以,就先把数据拖过来,得到图表要反映的数目,再一贯从格子里面读了。所以最终最后,作者不想在报表里面见到数据,只要图表,隐蔽数据区域就好了。就那样轻松。

***   round(sysdate,’year’)
YEAR,***

24,round[舍入到最周边的日子](day:舍入到最周边的星期天卡塔尔国
select sysdate S1,
round(sysdate) S2 ,
round(sysdate,’year’) YEAR,
round(sysdate,’month’) MONTH ,
round(sysdate,’day’) DAY from dual

 

然后说说报表吧,那几个表格是在一张表当中显示了八个图表,二个日趋向,别的多个都以周趋势。当中第三个图和第二图的计算的目的是相通的,分别都是CPU利用率,内存利用率和磁盘的利用率。这多个指标的构成往往能够代表后生可畏台机械的大忙程度。

            

20.一年的第几天      
select TO_CHAR(SYSDATE,’DDD’),sysdate from dual

12.获得小时数
extract(卡塔尔(قطر‎寻觅日期或间距值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP ‘2001-02-16 2:38:40’) from offer
SQL> select sysdate ,to_char(sysdate,’hh’) from dual;

20.一年的第几天*

select    (sysdate-to_date(‘2003-12-03 12:55:45′,’yyyy-mm-dd
hh24:mi:ss’))*24*60*60 from ddual
日期 再次来到的是天 然后 转变为ss

select (sysdate-to_date(‘2003-12-03 12:55:45′,’yyyy-mm-dd
hh24:mi:ss’))*24*60*60 from ddual
日子 重临的是天 然后 转变为ss

MON 月的缩写

Day:      
dd    number         前些时间第几天        凸显值:02
ddd    number         当年第几天        展现值:02
dy    abbreviated 当周第几天简写    展现值:星期五,倘使Lithuania语版,彰显fri
day    spelled out   当周第几天全写   
展现值:星期四,若是斯洛伐克共和国语版,展现friday        
ddspth spelled out, ordinal twelfth 

Hour:
hh two digits 12钟头进制 呈现值:01
hh24 two digits 24小时进制 展现值:13

        dy abbreviated 当周第几天简写 呈现值:星期五,倘诺英文版,展现fri

  1. 查找月份     
    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 

  2. Next_day的用法      
    Next_day(date, day)      

SELECT   to_char(SYSDATE - interval '1' month, 'yyyyMMdd') AS fromdata, to_char(SYSDATE - interval '1' day, 'yyyyMMdd') 
                AS enddata
FROM      DUAL;

使用TO_CHAENCORE函数管理数字

26,再次回到日期列表中最迟日期
select greatest(’01-1月-04′,’04-1月-04′,’10-2月-04′) from dual

18.不一致不常候区的拍卖
select to_char( NEW_TIME( sysdate, ‘GMT’,’EST’), ‘dd/mm/yyyy
hh:mi:ss’) ,sysdate
from dual;

***   end;***

SQL> select sysdate ,to_char(sysdate,’hh24′) from dual;      

13.年月日的拍卖
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days

*** 
 2002-11-1 9:55:00
35786***

Year:      
yy two digits 两位年                显示值:07
yyy three digits 三位年                显示值:007
yyyy four digits 四位年                显示值:2007

24钟头格式下时限为: 0:00:00 – 23:59:59….
12钟头格式下时间约束为: 1:00:00 – 12:59:59 ….

**    **

其它
Q     digit         季度                  显示值:4
WW    digit         当年第几周            展现值:44
W    digit          前段时期第几周            呈现值:1

闰年的拍卖方式
to_char( last_day( to_date(’02’ | | :year,’mmyyyy’) ), ‘dd’ )
假诺是28就不是闰年

**     
24,round[舍入到最相近的日子](day:舍入到最雷同的星期日卡塔尔**

25,trunc[截断到最肖似的日期,单位为天] ,再次来到的是日期类型
select sysdate S1,                     
trunc(sysdate卡塔尔(قطر‎ S2,                 //重返当明天期,无时分秒
trunc(sysdate,’year’卡塔尔国 YEALacrosse,        //重回当二零大器晚成八年的7月1日,无时分秒
trunc(sysdate,’month’卡塔尔国 MONTH ,     //重返当前月的1日,无时分秒
trunc(sysdate,’day’卡塔尔 DAY           //再次来到当前礼拜的周天,无时分秒
from dual

只是今日是八月31号,下一个月今日就是四月31号。Oracle找不到,只好报错了。

TO_DATE

16.找寻当年的流年      
select add_months(trunc(sysdate,’year’), 12) – trunc(sysdate,’year’)
from dual    

SELECT   to_char(add_months(sysdate,-1), 'yyyyMMdd') AS fromdata, to_char(SYSDATE - interval '1' day, 'yyyyMMdd') 
                AS enddata
FROM      DUAL;

MONTH 月的全拼

23.next_day函数     
重回下个星期的日子,day为1-7或星期六-星期日,1表示星期天
next_day(sysdate,6State of Qatar是从当前最早下多少个礼拜一。前边的数字是从周六最先算起。      
1 2 3 4 5 6 7      
日 一 二 三 四 五 六    


        yy two digits 两位年 显示值:07

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 //时间差-秒

推而广之,看来一月29、30也可能有相当的大可能率报错。

“特殊字符” 要是特殊字符

       
13.年月日的管理      
select older_date,      
newer_date,      
years,      
months,      
abs(      
trunc(      
newer_date-      
add_months( older_date,years*12+months )      
)      
) days 

24,round[舍入到最形似的日子](day:舍入到最肖似的周天State of Qatar
select sysdate S1,
round(sysdate) S2 ,
round(sysdate,’year’) YEAR,
round(sysdate,’month’) MONTH ,
round(sysdate,’day’) DAY from dual


显示Two Hundred Twenty-Two    

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 to_char(sys_date,’hh:mi:ss’) from all_objects;


 

27.思量时间差
注:oracle时间差是以天数为单位,所以换算成年月,日

   monday

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 
)      
)    

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;

, 突显千位提示符

310 2002-11-6 10:03:51    

SYSDATE TO_CHAR(SYSDATE,’HH24′)

**   select
to_char( NEW_TIME( sysdate, ‘GMT’,’EST’), ‘dd/mm/yyyy hh:mi:ss’)
,sysdate**

介意要用TO_DATE(null)    

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
)


  1. 三个日中间的运气      
    select floor(sysdate – to_date(‘20020405′,’yyyymmdd’)) from dual;    

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

Second:
ss two digits 60进制 显示值:25

TO_CHAR(date,’格式’);

Hour:
hh    two digits 12小时进制            展现值:01
hh24 two digits 24钟头进制            显示值:13

日子函数用法:

3.求某天是星期几

搜求2000-02-28至二〇〇四-02-01间除星期二和七的气数      
在左右分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(获得的是1/100秒,
并不是皮秒卡塔尔.    

yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

***    2003-10-13
19:35:21
19***

23.next_day函数
重临下个星期的日子,day为1-7或星期日-周天,1意味星期天
next_day(sysdate,6卡塔尔是从当前初始下三个周三。前面包车型地铁数字是从星期日上马算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

  • 60*TRUNC(A*24))
    Minutes,*

sysdate+1 加一天
sysdate+1/24 加1小时
sysdate+1/(24*60) 加1分钟
sysdate+1/(24*60*60) 加1秒钟
类推至皮秒0.001秒

*   ALTER SESSION SET
NLS_DATE_LANGUAGE=’AMERICAN’;*


*   yyyy
99
0099*

6.月份差
a_date between to_date(‘20011201′,’yyyymmdd’) and
to_date(‘20011231′,’yyyymmdd’)
那就是说十7月31号下午12点现在和一月1号的12点以前是不带有在这里个界定之内的。
据此,当岁月须求规范的时候,认为to_char依然必不可缺的

*    (*

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;

MM 数字月

 

*    注意自个儿这只是举了NLS_DATE_LANGUAGE,当然还会有许多,*

Month:
mm number 两位月 显示值:11
mon abbreviated 字符集表示 展现值:二月,假使Република Србија语版,突显nov
month spelled out 字符集表示 展现值:10月,若是俄语版,呈现november