常用的時間格式掩碼如下:
掩碼元素 含義
YYYY 四位元年份 (如:2005) year
YY 二位元年份(如 05)
Q 季度(1-4)
MM 月份(01-12) month
WW 年的星期數(1-53),其中第一星期為年的第一天至第七天
W 月的星期數(1-5),其中第一星期為月的第一天至第七天
DDD 年的日(1-366)
DD 月的日(1-31)
D 周的日(1-7),其中周日為1,周六為7 day
HH24 24小時制(0-23) hour
MI 分鐘(0-59) minute
SS 秒(0-59) second
SSSSS 自午夜之後的秒(0-86399)
兩個很不錯的函數,可以操作日期,也可以運算元值:
round(日期,'指定的日期掩碼') 返回日期時間的四捨五入結果
指定的掩碼不同則結果結果也不同
year 以 7月1日分界線
month 以16號為分界線
day 以中午12點為分界線
hh 以30分鐘為分界線
mi 以30秒為分界線
trunc(日期,'指定的日期掩碼') 返回截斷時間
year 本年度的1月1日
month 本月的1號
例子:(注意: day d dd 三者的區別)
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-17
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-16
日期時間函數:
add_months(日期,number) 指定日期延遲number個月
last_day(日期) 指定日期當月的最後一天
new_time(日期,時區簡寫) 調整時區
next_day(日期,number) number表示周幾,星期日是1,指定number的日期(一周內或一周后)
months_between(日期1,日期2) 日期1和日期2之間有幾個月
sysdate 系統當期那日期和時間
練習時的代碼:
select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual;
TO_NUMBER(TO_CHAR(LAST_DAY(ADD
------------------------------
20040401
select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;
TO_NUMBER(TO_CHAR(LAST_DAY(ADD
------------------------------
20040430
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;
--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格式:
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')));
--insert into hkb_date
--(float_date)
-- values
--(to_char(v_date + i, 'yyyymmdd'));
-- insert into hkb_date
--(number_date)
-- values
--(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; 繼承表記錄