PLSQL日期函數


帶時分秒 轉換成日期類型to_date('20120801 00:00:00','yyyymmdd HH24:Mi:SS')
六種日期函數:
1. add_months(日期,number) 指定日期推遲number個月
2. last_day(日期) 指定日期當月的最后一天
3. new_time(日期,時區簡寫) 調整時區
4. next_day(日期,number) number表示周幾,星期日是1,指定number的日期(一周內或一周后)
5. months_between(日期1,日期2) 日期1和日期2之間有幾個月
6. sysdate 系統當期那日期和時間

==================================================================

1.TRUNC ---- for dates

  其具體的語法格式如下:

  TRUNC(date[,fmt])返回日期d1所在期間(參數c1)的第一天日期

  其中:

  date:日期時間類型,將要格式化的日期

  fmt:字符串型,日期的格式,默認是j(即當前日期),返回的日期所在期間由fmt指定的第一天。忽略它則返回年月日的形式。

             fmt對應的參數表:

             本周星期日:day或dy或d (每周順序:日,一,二,三,四,五,六)

             本季日期:q

             本年初日期:syear或year或yyyy或yyy或yy或y(多個y表示精度) 

             本月初日期:month或mon或mm或rm

             本日的日期:dd

             本日期的小時數:hh或HH24

             本日期的分鍾數:mi或Mi

             本世紀初日期:cc或scc

  下面是該函數的使用情況:

select sysdate from dual; --當前日期和時間
select trunc(sysdate) from dual;--今天日期
select trunc(sysdate ,'DD') from dual; --今天日期
select trunc(sysdate,'d')+7 from dual;--本周星期日的日期
select trunc(sysdate,'dy')+7 from dual;  --本周星期日的日期
select trunc(sysdate,'day')+7 from dual; --本周星期日的日期
select trunc(sysdate,'q') from dual; --本季開始日期
select trunc(sysdate,'month') from dual; --本月開始日期
select trunc(sysdate ,'mm') from dual; --本月開始日期
select trunc(sysdate,'year') from dual;  --本年開始日期
select trunc(sysdate ,'yyyy') from dual; --本年開始日期
select trunc(sysdate ,'HH24') from dual; --本小時開始時間
select trunc(sysdate ,'MI') from dual; --本分鍾開始時間
select trunc(sysdate ,'CC') from dual; --本世紀開始日期
select trunc(LAST_DAY(sysdate),'dd') from dual; --本月最后一天

 

2.TRUNC ---- for number

  TRUNC函數返回處理后的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數點位數只后的部分做相應舍入選擇處理,而統統截去。

  其具體的語法格式如下

  TRUNC(number[,decimals])

  其中:

  number 待做截取處理的數值

  decimals 指明需保留小數點后面或前面的位數。可選項,忽略它則截去所有的小數部分

  下面是該函數的使用情況:

  TRUNC(89.985,2)=89.98

  TRUNC(89.985)=89

  TRUNC(89.985,-1)=80

  注意:第二個參數可以為負數,表示為小數點左邊指定位數后面的部分截去,即均以0記。與取整類似,比如參數為1即取整到十分位,如果是-1,則是取整到十位,以此類推。 

 下面是該函數對數字的用法:

select trunc(123.458) from dual; --123
select trunc(123.458,0) from dual; --123
select trunc(123.458,1) from dual; --123.4
select trunc(123.458,-1) from dual; --120
select trunc(123.458,-4) from dual; --0
select trunc(123.458,5) from dual;  --123.458
select trunc(123) from dual;  --123
select trunc(123,1) from dual; --123
select trunc(123,-1) from dual; --120

 

3.trunc()函數與round()函數的比較

round()函數可以對數字按指定保留小數位數四舍五入,這個函數還可以對日期四舍五入
round函數的數字的用法
select round(123.458) from dual; --123
select round(123.458,0) from dual; --123
select round(123.458,1) from dual; --123.5
select round(123.458,-1) from dual; --120
select round(123.458,-4) from dual; --0
select round(123.458,5) from dual;  --123.458
select round(123) from dual;  --123
select round(123,1) from dual; --123
select round(123,-1) from dual; --120
select round(51.458,-2) from dual; --100

round函數的日期時間的用法

select round(sysdate) from dual;--四舍五入到日
select round(sysdate,'yyyy') from dual; --四舍五入到年
select round(sysdate,'mm') from dual; --四舍五入到月
select round(sysdate,'dd') from dual; --四舍五入到日
select round(sysdate,'hh') from dual; --四舍五入到小時
select round(sysdate,'mi') from dual; --四舍五入到分鍾
select round(sysdate,'d') from dual; --四舍五入到周,星期日的日期
select round(sysdate,'q') from dual; --四舍五入到季的開始日期
select round(sysdate ,'CC') from dual; --四舍五入到世紀開始日期

select round(to_date('20161215 00:00:00','yyyymmdd HH24:Mi:SS') ,'d') from dual;--四舍五入到周,星期日的日期

 

參考出處:http://blog.csdn.net/eleven204/article/details/6712538

http://www.cnblogs.com/gengaixue/archive/2012/11/21/2781037.html

==================================================================
oracle plsql 對日期的處理函數和sql例子

102.取時間點的年份的寫法:
select to_char(sysdate,'yyyy') from dual;

103.取時間點的月份的寫法:
select to_char(sysdate,'mm') from dual;

104.取時間點的日的寫法:
select to_char(sysdate,'dd') from dual;

105.取時間點的時的寫法:
select to_char(sysdate,'hh24') from dual;

106.取時間點的分的寫法:
select to_char(sysdate,'mi') from dual;

107.取時間點的秒的寫法:
select to_char(sysdate,'ss') from dual;

108.取時間點的日期的寫法:
select trunc(sysdate) from dual;

109.取時間點的時間的寫法:
select to_char(sysdate,'hh24:mi:ss') from dual;

110.日期,時間形態變為字符形態
select to_char(sysdate) from dual;

111.將字符串轉換成日期或時間形態:
select to_date('2003/08/01') from dual;

112.返回參數的星期幾的寫法:
select to_char(sysdate,'d') from dual;

113.返回參數一年中的第幾天的寫法:
select to_char(sysdate,'ddd') from dual;

114.返回午夜和參數中指定的時間值之間的秒數的寫法:
select to_char(sysdate,'sssss') from dual;

115.返回參數中一年的第幾周的寫法:
select to_char(sysdate,'ww') from dual;
==================================================================
練習時的代碼:
select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual;
------------------------------
20040401

select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;
------------------------------
20040430

--select sysdate from dual; 當前日期
--select last_day(sysdate) from dual; 月底日期
--select last_day(add_months(sysdate, -1)) from dual; 上月底日期
-- SELECT to_char(last_day(SYSDATE),'dd') days FROM dual; 當前月的天數
--select last_day(add_months(sysdate,-1))+1 from dual; 當前月第一天
--select to_number(to_char(sysdate,'yyyymmdd')) from dual;系統當前日期轉換成如20070910格式:

==================================================================

create or replace procedure p_hkb_date_insert is
/*
過程功能描述:日期插入表中
*/
v_days number(10);
v_date date;
i number(10);
begin
  begin
    --取得當月天數
    select to_number(to_char(last_day(sysdate), 'dd')) into v_days from dual;
  end;

  i := 1;
  begin
    select last_day(add_months(sysdate, -1)) into v_date from dual;
    while i <= v_days loop
      insert into hkb_date values(v_date + i, to_char(v_date + i, 'yyyymmdd'),to_number(to_char(v_date + i, 'yyyymmdd')));
      i := i + 1;
    end loop;
  end;
end p_hkb_date_insert;
==================================================================
create table hkb_date_construct as select * from hkb_date where 1=2; 繼承表字段
create table hkb_date_data as select * from hkb_date; 繼承表記錄

出處:http://geniuszhe.blog.163.com/blog/static/11934682012731574991/

        http://namelysweet.blog.hexun.com/5714847_d.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM