读书人

oracle 数据类型详解-日期型

发布时间: 2013-08-06 16:47:25 作者: rapoo

oracle 数据类型详解---日期型

 1 create table T 2 ( 3   C1 DATE, 4   C2 TIMESTAMP(9) 5 ); 6  7 insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211'); 8 insert into t(c1,c2) values( 9        to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),10        to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')11 );12 13 SQL> select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;


C1?????????????????????? C1_D???????????????????????????????????? C2?????????????????????????????????????? C2_D
------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------
2010-2-12??????????????? Typ=12 Len=7: 120,110,2,12,1,1,1???????? 12-FEB-10 01.24.52.234123211 PM????????? Typ=180 Len=11: 120,110,2,12,14,25,53,13,244,111,203
2010-2-12 上午 10:20:30? Typ=12 Len=7: 120,110,2,12,11,21,31????? 12-FEB-10 01.24.52.123456000 PM????????? Typ=180 Len=11: 120,110,2,12,14,25,53,7,91,202,0

以下是为了测试是为了验证TIMESTAMP的小数位存储算法:

1 SQL> SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第几天(1-7),星期天=1,星期一=2,星期二=3,星期三=4,星期四=5,星期五=6,星期六=72 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--月第几天3 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第几天4 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英文星期名5 _CHAR(date '2010-02-12', 'w') month_weekth,--月第几周(0-4)6 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第几周(0-53)7 FROM DUAL;

?

WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH
---------- ----------- ---------- ----------- ------------ -----------
6????????? 12????????? 043??????? FRIDAY????? 2??????????? 07

3.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成日期
to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')
格式备注:
HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟。

3.3、TRUNC(DATE)--返回DATE的日期部分,时间为0点0分0秒

SQL> select sysdate d1,trunc(sysdate) d2 from dual;

?
D1?????????????????????? D2
------------------------ ------------------------
2010-5-13 下午 10:59:18? 2010-5-13

3.4、EXTRACT(DATA FROM DATEVALUE)--返回DATE的某一部份内容
?如果DATEVALUE为DATE类型,则DATA可以是(YEAR、MONTH、DAY)
?如果DATEVALUE为TIMESTAMP类型,则DATA可以是(YEAR、MONTH,DAY、HOUR、MINUTE、SECOND)

SQL> select sysdate d1,EXTRACT(YEAR FROM sysdate) thisyear,EXTRACT(MINUTE FROM systimestamp) thism from dual;

?
D1???????????????????????? THISYEAR????? THISM
------------------------ ---------- ----------
2010-5-13 下午 11:05:06??????? 2010????????? 5
3.5、ADD_MONTHS(DATE,MONTHS) --在DATE增加月份得到新日期

ADD_MONTHS(sysdate,3) --当前日期加3个月
ADD_MONTHS是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示

1   SQL> select ADD_MONTHS(date '2010-2-12', 1),2   ADD_MONTHS(date '2010-2-27', 1),3   ADD_MONTHS(date '2010-2-28', 1),4   ADD_MONTHS(date '2010-1-31', 1)5   from dual6   ;

?
ADD_MONTHS(DATE'2010-2-12',1) ADD_MONTHS(DATE'2010-2-27',1) ADD_MONTHS(DATE'2010-2-28',1) ADD_MONTHS(DATE'2010-1-31',1)
----------------------------- ----------------------------- ----------------------------- -----------------------------
2010-3-12???????????????????? 2010-3-27???????????????????? 2010-3-31???????????????????? 2010-2-28

3.6、LAST_DAY(DATE)--返回日期所在月份的最后一天日期

SQL> select LAST_DAY(date '2010-2-12') from dual;

?
LAST_DAY(DATE'2010-2-12')
-------------------------
2010-2-28
?
3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期

SQL> SELECT NEXT_DAY(date'2010-2-21', 'MONDAY') NEXTDAY1,NEXT_DAY(date'2010-2-22', 'MONDAY') NEXTDAY2 FROM DUAL;

?
NEXTDAY1??? NEXTDAY2
----------- -----------
2010-2-22?? 2010-3-1

TO_YMINTERVAL(CHAR)--返回[年-月]格式构成的时间间隔,一般用于日期加减运算


3.8、TO_DSINTERVAL(CHAR)--返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算

SQL> select date'2010-2-12'+TO_YMINTERVAL('01-02') newdate from dual;

?
NEWDATE
------------------------------
2011-4-12


3.9、NUMTOYMINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
char可以为YEAR,MONTH

1 SQL> select date '2010-2-12' + NUMTOYMINTERVAL(1, 'year') newdate1,2 date '2010-2-12' + NUMTOYMINTERVAL(1, 'month') newdate23 from dual;

?
NEWDATE1??? NEWDATE2
----------- -----------
2011-2-12?? 2010-3-12

3.10、NUMTODSINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
char可以为DAY,HOUR,MINUTE,SECOND

1 SQL> select date '2010-2-12' + NUMTODSINTERVAL(1, 'DAY') newdate1,2 date '2010-2-12' + NUMTODSINTERVAL(1, 'HOUR') newdate23 from dual;

?
NEWDATE1??? NEWDATE2
----------- ------------------------
2010-2-13?? 2010-2-12 上午 01:00:00

读书人网 >互联网

热点推荐