oracle处理日期详解

  1. TO_DATE格式   
  2. Day:   
  3. dd number 12   
  4. dy abbreviated fri   
  5. day spelled out friday   
  6. ddspth spelled out, ordinal twelfth   
  7. Month:   
  8. mm number 03   
  9. mon abbreviated mar   
  10. month spelled out march   
  11. Year:   
  12. yy two digits 98   
  13. yyyy four digits 1998   
  14.   
  15. 24小时格式下时间范围为: 0:00:00 - 23:59:59....   
  16. 12小时格式下时间范围为: 1:00:00 - 12:59:59 ....   
  17. 1.   
  18. 日期和字符转换函数用法(to_date,to_char)   
  19.   
  20. 2.   
  21. select to_char( to_date(222,'J'),'Jsp') from dual   
  22.   
  23. 显示Two Hundred Twenty-Two   
  24.   
  25. 3.   
  26. 求某天是星期几   
  27. select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;   
  28. 星期一   
  29. select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   
  30. monday   
  31. 设置日期语言   
  32. ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';   
  33. 也可以这样   
  34. TO_DATE ('2002-08-26''YYYY-mm-dd''NLS_DATE_LANGUAGE = American')   
  35.   
  36. 4.   
  37. 两个日期间的天数   
  38. select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;   
  39.   
  40. 5. 时间为null的用法   
  41. select id, active_date from table1   
  42. UNION   
  43. select 1, TO_DATE(null) from dual;   
  44.   
  45. 注意要用TO_DATE(null)   
  46.   
  47. 6.   
  48. a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')   
  49. 那么1231号中午12点之后和121号的12点之前是不包含在这个范围之内的。   
  50. 所以,当时间需要精确的时候,觉得to_char还是必要的   
  51. 7. 日期格式冲突问题   
  52. 输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'   
  53. alter system set NLS_DATE_LANGUAGE = American   
  54. alter session set NLS_DATE_LANGUAGE = American   
  55. 或者在to_date中写   
  56. select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   
  57. 注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,   
  58. 可查看   
  59. select * from nls_session_parameters   
  60. select * from V$NLS_PARAMETERS   
  61.   
  62. 8.   
  63. select count(*)   
  64. from ( select rownum-1 rnum   
  65. from all_objects   
  66. where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-   
  67. 02-01','yyyy-mm-dd')+1   
  68. )   
  69. where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1'D' )   
  70. not   
  71. in ( '1''7' )   
  72.   
  73. 查找2002-02-282002-02-01间除星期一和七的天数   
  74. 在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).   
  75.   
  76. 9.   
  77. select months_between(to_date('01-31-1999','MM-DD-YYYY'),   
  78. to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   
  79. 1   
  80.   
  81. select months_between(to_date('02-01-1999','MM-DD-YYYY'),   
  82. to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   
  83.   
  84. 1.03225806451613   
  85. 10. Next_day的用法   
  86. Next_day(date, day)   
  87.   
  88. Monday-Sunday, for format code DAY   
  89. Mon-Sun, for format code DY   
  90. 1-7for format code D   
  91.   
  92. 11   
  93. select to_char(sysdate,'hh:mi:ss') TIME from all_objects   
  94. 注意:第一条记录的TIME 与最后一行是一样的   
  95. 可以建立一个函数来处理这个问题   
  96. create or replace function sys_date return date is   
  97. begin   
  98. return sysdate;   
  99. end;   
  100.   
  101. select to_char(sys_date,'hh:mi:ss') from all_objects;   
  102. 12.   
  103. 获得小时数   
  104.   
  105. select EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer   
  106. SQL> select sysdate ,to_char(sysdate,'hh') from dual;   
  107.   
  108. SYSDATE TO_CHAR(SYSDATE,'HH')   
  109. -------------------- ---------------------   
  110. 2003-10-13 19:35:21 07   
  111.   
  112. SQL> select sysdate ,to_char(sysdate,'hh24') from dual;   
  113.   
  114. SYSDATE TO_CHAR(SYSDATE,'HH24')   
  115. -------------------- -----------------------   
  116. 2003-10-13 19:35:21 19   
  117.   
  118. 获取年月日与此类似   
  119. 13.   
  120. 年月日的处理   
  121. select older_date,   
  122. newer_date,   
  123. years,   
  124. months,   
  125. abs(   
  126. trunc(   
  127. newer_date-   
  128. add_months( older_date,years*12+months )   
  129. )   
  130. ) days   
  131. from ( select   
  132. trunc(months_between( newer_date, older_date )/12) YEARS,   
  133. mod(trunc(months_between( newer_date, older_date )),   
  134. 12 ) MONTHS,   
  135. newer_date,   
  136. older_date   
  137. from ( select hiredate older_date,   
  138. add_months(hiredate,rownum)+rownum newer_date   
  139. from emp )   
  140. )   
  141.   
  142. 14.   
  143. 处理月份天数不定的办法   
  144. select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual   
  145.   
  146. 16.   
  147. 找出今年的天数   
  148. select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual   
  149.   
  150. 闰年的处理方法   
  151. to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )   
  152. 如果是28就不是闰年   
  153.   
  154. 17.   
  155. yyyy与rrrr的区别   
  156. 'YYYY99 TO_C   
  157. ------- ----   
  158. yyyy 99 0099   
  159. rrrr 99 1999   
  160. yyyy 01 0001   
  161. rrrr 01 2001   
  162.   
  163. 18.不同时区的处理   
  164. select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate   
  165. from dual;   
  166.   
  167. 19.   
  168. 5秒钟一个间隔   
  169. select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')   
  170. from dual   
  171.   
  172. 2002-11-1 9:55:00 35786   
  173. SSSSS表示5位秒数   
  174.   
  175. 20.   
  176. 一年的第几天   
  177. select TO_CHAR(SYSDATE,'DDD'),sysdate from dual   
  178. 310 2002-11-6 10:03:51   
  179.   
  180. 21.计算小时,分,秒,毫秒   
  181. select   
  182. Days,   
  183. A,   
  184. TRUNC(A*24) Hours,   
  185. TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,   
  186. TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,   
  187. TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds   
  188. from   
  189. (   
  190. select   
  191. trunc(sysdate) Days,   
  192. sysdate - trunc(sysdate) A   
  193. from dual   
  194. )   
  195.   
  196.   
  197.   
  198. select * from tabname   
  199. order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');   
  200.   
  201. //   
  202. floor((date2-date1) /365) 作为年   
  203. floor((date2-date1, 365) /30) 作为月   
  204. mod(mod(date2-date1, 365), 30)作为日.   
  205. 23.next_day函数   
  206. next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。   
  207. 1 2 3 4 5 6 7   
  208. 日 一 二 三 四 五 六 

本文转载自 http://www.itjianghu.net/120108/40916340613425988.htm

你可能感兴趣的:(oracle,职场,休闲)