oracle里面如何去当月第一天,oracle獲取本月第一天和最后一天及Oracle trunc()函數的用法...

select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天",

to_char(last_day(sysdate), 'yyyy-mm-dd') "本月最后一天"

--Oracle trunc()函數的用法

/**************日期********************/

1.select trunc(sysdate) from dual  --2011-3-18  今天的日期為2011-3-18

2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回當月第一天.

3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回當年第一天

4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回當前年月日

5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回當年第一天

6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回當前星期的第一天

7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   當前時間為14:41

8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函數沒有秒的精確

/***************數字********************/

/*

TRUNC(number,num_digits)

Number 需要截尾取整的數字。

Num_digits 用於指定取整精度的數字。Num_digits 的默認值為0。

TRUNC()函數截取時不進行四舍五入

*/

9.select trunc(123.458) from dual --123

10.select trunc(123.458,0) from dual --123

11.select trunc(123.458,1) from dual --123.4

12.select trunc(123.458,-1) from dual --120

13.select trunc(123.458,-4) from dual --0

14.select trunc(123.458,4) from dual  --123.458

15.select trunc(123) from dual  --123

16.select trunc(123,1) from dual --123

17.select trunc(123,-1) from dual --120

select to_char(sysdate,'yyyy/mm')||'/01' from dual                          日期函數1、        日期和字符轉換函數用法(to_date,to_char) 。2、        求某天是星期幾方法:a、select to_char(to_date('2004-12-27','yyyy-mm-dd'),'day') from dual;  顯示結果:Mondayb、select to_char(sysdate,'day') from dual;  顯示結果:Monday3、        兩個日期間的天數select floor(sysdate -to_date('2002/04/05','yyyy/mm/dd')) from dual;  4、        時間為null的用法注意要用TO_DATE(null);5、本月有多少天select floor(last_day(sysdate)-add_months(last_day(sysdate) +1, -1)) from dual6、求本天是本周的第幾天a、        select to_char(sysdate,'d') from dual;b、        select to_char(sysdate,'yyyy') from dual;c、        select to_char(sysdate,'mm') from dual;7、求兩個日期間的月數select floor(months_between(to_date('03-25-1999','MM-DD-YYYY'),  to_date('12-31-1998','MM-DD-YYYY'))) "MONTHS" FROM DUALTO_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 ....  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位秒數  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) 作為月  mod(mod(date2-date1, 365), 30)作為日.  23.next_day函數  next_day(sysdate,6)是從當前開始下一個星期五。后面的數字是從星期日開始算起。  1 2 3 4 5 6 7  日 一 二 三 四 五 六

http://bbs.csdn.net/topics/350171876