`
lovejing007
  • 浏览: 95743 次
社区版块
存档分类
最新评论

TO_DATE格式

阅读更多

转载

注意:oralce管理工具的不同,输出的结果也是不一样的,有的是全中文,有的是全E文

 

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;

 

分享到:
评论

相关推荐

    Oracle中TO_DATE TO_CHAR格式

    Oracle 中 TO_DATE TO_CHAR 格式详解 Oracle 中 TO_DATE 和 TO_CHAR 函数是两个非常重要的日期时间处理函数,主要用于格式化日期和时间数据,以满足不同的应用需求。在本文中,我们将详细介绍 TO_DATE 和 TO_CHAR ...

    Oracle 中的 TO_DATE 和 TO_CHAR 函数

    SELECT TO_CHAR(TO_DATE('2002-08-26', 'yyyy-mm-dd'), 'DAY', 'NLS_DATE_LANGUAGE=American') FROM DUAL; ``` 可以通过设置`NLS_DATE_LANGUAGE`参数来改变输出的语言。 #### 三、其他应用场景 除了上述基本应用外...

    Oracle to_date() 用法细节.txt

    通过本文的学习,我们不仅了解了 `to_date()` 函数的基本用法和参数格式,还深入探讨了日期格式掩码的意义及各种日期操作技巧。这对于日常开发工作中处理日期相关的问题有着重要的意义。此外,通过实际案例的演示,...

    TO_DATE用法详解.doc

    该函数的语法为:TO_DATE(date_string, format_string),其中 date_string 是要转换的日期字符串,format_string 是日期字符串的格式。 1. 日期字符串格式 日期字符串可以有多种格式,例如:YYYY-MM-DD HH24:MI:SS...

    Oracle_to_date

    - 示例: `SELECT TO_CHAR(TO_DATE('2002-08-26', 'YYYY-MM-DD'), 'DAY', 'NLS_DATE_LANGUAGE=American') FROM DUAL;` - **计算两个日期之间的天数差**: - 示例: `SELECT FLOOR(SYSDATE - TO_DATE('20020405', '...

    ORACLE 关于时间函数to_date 的运用

    - `format_mask`: 字符串的日期格式掩码,用于指导如何解析`date_string`。 ### 格式掩码详解 格式掩码定义了日期字符串的结构,帮助`TO_DATE`函数正确解析。以下是一些常用的格式掩码元素: - **年份**: - `yy`...

    Oracle的to_date函数.doc

    在使用 to_date 函数时,需要指定日期字符串的格式,以便 Oracle 能够正确地解析日期字符串。日期格式参数是用来指定日期字符串的格式的,它由一个或多个日期元素组成,每个日期元素都有其特定的含义。 以下是 ...

    oracle中to_date详细用法示例(oracle日期格式转换)

    使用`TO_CHAR`函数结合适当的格式模型和NLS_DATE_LANGUAGE参数,可以确定日期是星期几。例如,`TO_CHAR(TO_DATE('2002-08-26', 'yyyy-mm-dd'), 'day')`会返回星期几的全名,而`NLS_DATE_LANGUAGE`参数用于设定日期...

    oracle导出时间格式转换

    大家都知道,从oracle数据库中导出数据时,如果其中有字段类型为date,那么导出时将会变成to_date('29-12-2010 10:20:30', 'hh24:mi:ss'),如果你要将这导出的数据在oracle客户端中执行,应该是没什么问题的,但是...

    oracle-sql基本语法例子,包括to_date,to_char

    总结的sql语法,其中包括一些函数的用法,to_date,to_char,to_number等等函数

    Oracle中TO_DATE、TO_CHAR,Oracle函数大全

    TO_DATE(date_string, format_mask[, nls_date_language]) ``` - `date_string`:这是要转换成日期的字符串。 - `format_mask`:定义了字符串中的日期元素布局。例如,'DD-MON-RRRR' 表示日-月-4位年份,'YYYY-MM-...

    Oracle中TO-DATE格式.docx

    Oracle 中 TO_DATE 格式详解 TO_DATE 函数是 Oracle 中一个非常重要的函数,它用于将字符串转换为日期类型。在 Oracle 中,日期类型可以是 DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE 等多种形式。TO_DATE 函数的...

    讲述Oracle中的to_date参数含义

    `to_date`的主要参数是一个包含日期信息的字符串,以及一个可选的日期格式模型,用于指定输入字符串的日期部分和时间部分的布局。 日期格式模型是由各种字母符号组成的,每个符号对应日期或时间的一个组成部分。...

    Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理

    Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理 Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理

    Oracle to_date()函数的用法介绍

    一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用”yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:”ORA 01810 格式代码出现两次”。 select to_date(...

Global site tag (gtag.js) - Google Analytics