现在的位置: 首页 > 综合 > 正文

oracle数据类型之DATETIME

2013年09月21日 ⁄ 综合 ⁄ 共 1712字 ⁄ 字号 评论关闭

Datetime and Interval


        在007题库中有一道关于DATETIME数据类型的题目:
        Which three are DATETIME data types that can be used when specifying column definitions? (Choose three)

        A.  TIMESTAMP
        B.  INTERVAL MONTH TO DAY
        C.  INTERVAL DAY TO SECOND
        D.  INTERVAL YEAR TO MONTH
        E.  TIMESTAMP WITH DATABASE TIMEZONE

这道题,因为要选三个答案,因此应该就是A, C, D。 不过在Oracle9i Reference中,好像并没有把INTERVAL归到datetime datatypes 里面, 原文是如此描述的:

        The datetime datatypes are DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE. Values of datetime datatypes are sometimes called "datetimes". The interval datatypes are INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND. Values
of interval datatypes are sometimes called intervals.

 

因此如果上面的题目中没有指定选择三个,那很有可能就做错了。

 

DATE数据类型在工作中用的最多,一般就是包含年月日时分秒。不过以前从来没用过日期常量,格式为DATE'2009-07-28', 不能包含时间部分,且必须是'YYYY-MM-DD'格式,如果要包含时间部分,只能用to_date来转化了。

 

timestamp和interval这两个数据类型在工作中用的很少。
timestamp和date差不多,只是后面多了秒以下的部分,可以用0-9位的小数来表示其精度(fractional_seconds_precision)。不过还有个区别是timestamp后面可以加上WITH TIME ZONE 或者 WITH LOCAL TIME ZONE。其中WITH TIME ZONE表示该数据类型中还包含了和UTC之间的时区偏移信息;而WITH LOCAL TIME ZONE的数据类型中,存储时都是标准化成数据库的时区,当用户获取数据时,oracle会根据用户本地session中的时区信息来计算和UTC的时区偏移。

 

interval印象里在8i没见过,可能是借鉴informix里面的interval数据类型,不过oracle9i只有两种interval类型:interval year to month和interval day to second,比informix里面简单多了,其中year后可以加一个精度控制,比如 interval year(1) to month,那么年部分最多就是1位数,该值缺省为2;day部分也一样,如inetrval day(3) to second, 表示日部分最多3位数,该值缺省也为2;second后面还可以加上秒以下的时间精度,如inetrval
day(3) to second(3),表示秒以下部分用3位小数表示。 注意这个second后面的数字容易理解为是秒的精度,实际上是秒以下部分的精度。
interval的常量表示类似如下方式:
interval '3-1' year to month, 表示3年零1个月, 也相当于interval '37' month,即37个月
interval '2 1:0:0' day to second,表示2天1小时。
interval '999 00:01:00.123' day(3) to second (3)

interval数据类型可以和date,timstamp类型进行加减运算,两个相同的interval类型也可以加减运算,但是interval year to month和interval day to second不能进行运算。

抱歉!评论已关闭.