IT猫扑网:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置:首页数据库Oracle → Oracle日期时间函数的应用

Oracle日期时间函数的应用

时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)

  1、转换函数

  与date操作关系最大的就是两个转换函数:to_date(),to_char()

  to_date() 作用将字符类型按一定格式转化为日期类型:

  具体用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。

  如;to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd hh24:mi:ss'') 将得到具体的时间

  多种日期格式:

  YYYY:四位表示的年份

  YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪

  MM:01~12的月份编号

  MONTH:九个字符表示的月份,右边用空格填补

  MON:三位字符的月份缩写

  WW:一年中的星期

  D:星期中的第几天

  DD:月份中的第几天

  DDD:年所中的第几天

  DAY:九个字符表示的天的全称,右边用空格补齐

  HH,HH12:一天中的第几个小时,12进制表示法

  HH24:一天中的第几个小时,取值为00~23

  MI:一小时中的分钟

  SS:一分钟中的秒

  SSSS:从午夜开始过去的秒数

  to_char():将日期转按一定格式换成字符类型

  SQL> select to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'') time from dual;

  TIME

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

  2004-10-08 15:22:58

  即把当前时间按yyyy-mm-dd hh24:mi:ss格式转换成字符类型

  在oracle中处理日期大全

  TO_DATE格式

  Day:

  dd number 12

  dy abbreviated fri

  day spelled out friday

  ddspth spelled out, ordinal twelfth

  Month:

  mm number 03

  mon abbreviated mar

  month spelled out march

  Year:

  yy two digits 98

  yyyy four digits 1998

  24小时格式下时间范围为: 0:00:00 - 23:59:59....

  12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

  [ZT]日期和??函???

  1.

  日期和字符转换函数用法(to_date,to_char)

  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.

  获得小时数

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

#p#副标题#e#

  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(sysdat

关键词标签:Oracle

相关阅读

文章评论
发表评论

热门文章 Oracle中使用alter table来增加,删除,修改列Oracle中使用alter table来增加,删除,修改列oracle中使用SQL语句修改字段类型-oracle修oracle中使用SQL语句修改字段类型-oracle修使用低权限Oracle数据库账户得到管理员权限使用低权限Oracle数据库账户得到管理员权限Oracle对user的访问控制Oracle对user的访问控制

相关下载

人气排行 ORACLE SQL 判断字符串是否为数字的语句Oracle中使用alter table来增加,删除,修改列的语法ORACLE和SQL语法区别归纳(1)oracle grant 授权语句如何加速Oracle大批量数据处理Oracle删除表的几种方法ORACLE修改IP地址后如何能够使用Oracle 10g创建表空间和用户并指定权限