发表于 2018-9-25 10:27:12

oracle 日期函数

在oracle中处理日期大全  TO_DATE格式
  Day:
  ddnumber12
  dyabbreviatedfri
  dayspelledoutfriday
  ddspthspelledout,ordinaltwelfth
  Month:
  mmnumber03
  monabbreviatedmar
  monthspelledoutmarch
  Year:
  yytwodigits98
  yyyyfourdigits1998
  24小时格式下时间范围为:0:00:00-23:59:59....
  12小时格式下时间范围为:1:00:00-12:59:59....
  1.
  日期和字符转换函数用法(to_date,to_char)
  2.
  selectto_char(to_date(222,'J'),'Jsp')fromdual
  显示TwoHundredTwenty-Two
  3.
  求某天是星期几
  selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day')fromdual;
  星期一
  selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE=American')fromdual;
  monday
  设置日期语言
  ALTERSESSIONSETNLS_DATE_LANGUAGE='AMERICAN';
  也可以这样
  TO_DATE('2002-08-26','YYYY-mm-dd','NLS_DATE_LANGUAGE=American')
  4.
  两个日期间的天数
  selectfloor(sysdate-to_date('20020405','yyyymmdd'))fromdual;
  5.时间为null的用法
  selectid,active_datefromtable1
  UNION
  select1,TO_DATE(null)fromdual;
  注意要用TO_DATE(null)
  6.
  a_datebetweento_date('20011201','yyyymmdd')andto_date('20011231','yyyymmdd')
  那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
  所以,当时间需要精确的时候,觉得to_char还是必要的
  7.日期格式冲突问题
  输入的格式要看你安装的ORACLE字符集的类型,比如:US7ASCII,date格式的类型就是:'01-Jan-01'
  altersystemsetNLS_DATE_LANGUAGE=American
  altersessionsetNLS_DATE_LANGUAGE=American
  或者在to_date中写
  selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE=American')fromdual;
  注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
  可查看
  select*fromnls_session_parameters
  select*fromV$NLS_PARAMETERS
  8.
  selectcount(*)
  from(selectrownum-1rnum
  fromall_objects
  whererownum    selectsysdate,to_char(sysdate,'hh')fromdual;
  SYSDATETO_CHAR(SYSDATE,'HH')
  -----------------------------------------
  2003-10-1319:35:2107
  SQL>selectsysdate,to_char(sysdate,'hh24')fromdual;
  SYSDATETO_CHAR(SYSDATE,'HH24')
  -------------------------------------------
  2003-10-1319:35:2119
  获取年月日与此类似
  13.
  年月日的处理
  selectolder_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(selecthiredateolder_date,
  add_months(hiredate,rownum)+rownumnewer_date
  fromemp)
  )
  14.
  处理月份天数不定的办法
  selectto_char(add_months(last_day(sysdate)+1,-2),'yyyymmdd'),last_day(sysdate)fromdual
  16.
  找出今年的天数
  selectadd_months(trunc(sysdate,'year'),12)-trunc(sysdate,'year')fromdual
  闰年的处理方法
  to_char(last_day(to_date('02'    ||:year,'mmyyyy')),'dd')
  如果是28就不是闰年
  17.
  yyyy与rrrr的区别
  'YYYY99TO_C
  -----------
  yyyy990099
  rrrr991999
  yyyy010001
  rrrr012001
  18.不同时区的处理
  selectto_char(NEW_TIME(sysdate,'GMT','EST'),'dd/mm/yyyyhh:mi:ss'),sysdate
  fromdual;
  19.
  5秒钟一个间隔
  SelectTO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300)*300,'SSSSS'),TO_CHAR(sysdate,'SSSSS')
  fromdual
  2002-11-19:55:0035786
  SSSSS表示5位秒数
  20.
  一年的第几天
  selectTO_CHAR(SYSDATE,'DDD'),sysdatefromdual
  3102002-11-610: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
  fromdual
  )
  select*fromtabname
  orderbydecode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');
  //
  floor((date2-date1)/365)作为年
  floor((date2-date1,365)/30)作为月
  mod(mod(date2-date1,365),30)作为日.
  23.next_day函数
  next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
  1234567
  日一二三四五六
  ---------------------------------------------------------------
  select    (sysdate-to_date('2003-12-0312:55:45','yyyy-mm-ddhh24:mi:ss'))*24*60*60fromddual
  日期返回的是天然后转换为ss

页: [1]
查看完整版本: oracle 日期函数