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

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

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

2. 字符串和时间互转

复制代码 代码如下:

select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual
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.获得小时数

复制代码 代码如下:

//extract()找出日期或间隔值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer    
select sysdate ,to_char(sysdate,'hh') from dual;    

SYSDATE               TO_CHAR(SYSDATE,'HH')    
-------------------- ---------------------    
2003-10-13 19:35:21   07   

select sysdate ,to_char(sysdate,'hh24') from dual;    

SYSDATE               TO_CHAR(SYSDATE,'HH24')    
-------------------- -----------------------    
2003-10-13 19:35:21   19  

12.年月日的处理

复制代码 代码如下:

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

13.处理月份天数不定的办法

复制代码 代码如下:

select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual   

14.找出今年的天数

复制代码 代码如下:

select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual   
 //闰年的处理方法    
to_char( last_day( to_date('02'    | | :year,'mmyyyy') ), 'dd' )    
 //如果是28就不是闰年

15.yyyy与rrrr的区别

复制代码 代码如下:

YYYY99  TO_C    
------- ----    
yyyy 99 0099   
rrrr 99 1999   
yyyy 01 0001   
rrrr 01 2001 

16.不同时区的处理

复制代码 代码如下:

select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,
sysdate   from dual;   

17. 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位秒数   

18.一年的第几天

复制代码 代码如下:

select TO_CHAR(SYSDATE,'DDD'),sysdate from dual  
//310  2002-11-6 10:03:51   

19.计算小时,分,秒,毫秒

复制代码 代码如下:

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)作为日.

20.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 dual
//日期 返回的是天 然后 转换为ss

21,round[舍入到最接近的日期](day:舍入到最接近的星期日)

复制代码 代码如下:

select sysdate S1,
round(sysdate) S2 ,
round(sysdate,'year') YEAR,
round(sysdate,'month') MONTH ,
round(sysdate,'day') DAY from dual

22,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

复制代码 代码如下:

select sysdate S1,                   
  trunc(sysdate) S2,                 //返回当前日期,无时分秒
  trunc(sysdate,'year') YEAR,        //返回当前年的1月1日,无时分秒
  trunc(sysdate,'month') MONTH ,     //返回当前月的1日,无时分秒
  trunc(sysdate,'day') DAY           //返回当前星期的星期天,无时分秒
from dual

23,返回日期列表中最晚日期

复制代码 代码如下:

select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

24.计算时间差

复制代码 代码如下:

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

25.更新时间

复制代码 代码如下:

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

26.查找月的第一天,最后一天

复制代码 代码如下:

  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;

时间: 2024-10-31 12:55:26

oracle中to_date详细用法示例(oracle日期格式转换)_oracle的相关文章

Oracle中TO_DATE函数使用方法详解

一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:mm:ss"的格式作为格式进行转换,但是在Oracle中会引起错误:"ORA 01810 格式代码出现两次".如: select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;  原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQ

jQuery中$.fn的用法示例介绍

jQuery中$.fn的用法示例介绍 $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个jquery实例都可以引用这个方法了. 那么你可以这样子:$("#div").abc();  jQuery为开发插件提拱了两个方法,分别是:  jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法. jQuery.fn

php将日期格式转换成xx天前的格式_php技巧

本文实例讲述了php将日期格式转换成xx天前格式的方法.分享给大家供大家参考.具体如下: 这段代码可以把时间格式化成3天前,5秒前,2年前的形式 // convert a date into a string that tells how long ago // that date was.... eg: 2 days ago, 3 minutes ago. function ago($d) { $c = getdate(); $p = array('year', 'mon', 'mday',

Excel日期格式转换动画教程

<Excel2003入门动画教程5.Excel日期格式转换>. 演示动画 操作步骤 默认情况下,在Excel中,我们输入的日期格式是"2005-1-16",不太符合中国人的习惯.我们可以通过格式设置,将其设置为中文日期格式. 选中日期所在的单元格,执行"格式→单元格"命令,打开"单元格格式"对话框,在"数值"标签中,选中"分类"下面的"日期"选项,然后在右侧的"类型

excel日期格式转换

日期格式转换 格式一:输入20120920时,自动转换为2012-09-20 首先打开Excel表格,选中需要转换的单元格,然后点击鼠标右键,在弹出的列表中选择[设置单元格格式].如图所示: 在弹出的窗口中,点击上面[数字]按钮,在列表中选择[自定义]选项,然后再类型输入框中输入[0000-00-00]格式,点击确定.如图所示: 显示格式,我们来看看刚才设置的格式吧,选择刚才设置的单元格,输入20120920,然后回车.如图所示: 电脑教程 日期格式转换 格式二:输入20120920时,自动转换

sql 日期格式转换,如:2012年10月18日 转换为2012-10-18

问题描述 sql 日期格式转换,如:2012年10月18日 转换为2012-10-18 请问下,我sql数据库中有个date字段,字段里面的值都是这种类型数据:2012年10月18日. 我想把这些数据类型转换成2012-10-18.语句改怎么写啊 解决方案 你是说把date字段中的值全都改了吗? 似乎不行,只能取出来转换一下使用,或者变换完再存进去 解决方案二: Select CONVERT(varchar(100), GETDATE(), 23) 解决方案三: 用format不行吗? 解决方案

js和C# 时间日期格式转换的简单实例_javascript技巧

下午在搞MVC和EXTJS的日期格式互相转换遇到了问题,我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 '/Date(1335258540000)/' 这样的字串. 整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数.通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下 用var date = eval('new ' + eval('/Date(

php 日期格式转换:php日期格式转换总结

php日期格式转换总结<?php//将当前时间转換成yyyy-mm-dd格式串,再转换成日期格式,绕了一圈哈echo strtotime(date('Y-m-d',time()).' 00:00:00');//将GNU 日期输入格式的字符转换成时间echo strtotime('now');//标准的字符串转换成时间$t = '2012-9-10 15:18:06';$time = strtotime($t);//将时间转换成日期字符yyyymmdd,再转换成整型格式$d = intval(da

timestamp-求助db2日期格式转换问题

问题描述 求助db2日期格式转换问题 insert into studentNumber (ID, CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER, VERSION, BANK_CODE, CATEGORY_CODE_, CODE_, DESC_, MEMO_, INST_CODE, INDEX_) values ('795', '23-4月 -13 09.42.26.000000 上午', 'op_gzns', '04-10月-13 06.