• Oracle中time 和 timestamp 数据类型


      最近在百度知道看到有同学问到Oracle中的Date和 TimeStamp两种数据类型的区别,简单一句话就是两者关于时间的粒度不同。

      平时我们说到时间会首先想到year,month,day,hour,minute,second,也就是在我们生活中精确到这些时间基本都可以将具体问题解释清楚,但是在计算机中特别是多任务系统,在时间片的粒度远远小于我们生活中的时间粒度,所有为了标示计算机中的事件的粒度,Oracle引进了TimeStamp数据类型。该类型粒度小到可以说明计算机中事件的发生前后。

          现在就采用Oracle中的实践来说明两个数据类型的区别。

          1.登录Scott用户,创建TimeStamp_Test

    View Code
    SQL> connect scott/tiger
    已连接。
    SQL> show user;
    USER 为 "SCOTT"


    SQL> CREATE TABLE Timestamp_Test(
    2  Time DATE,
    3 Timestamp TIMESTAMP(3),
    4 TimestampWTZ TIMESTAMP(3) WITH TIME ZONE,
    5 TimestampWLTZ TIMESTAMP(3) WITH LOCAL TIME ZONE,
    6 Interval INTERVAL DAY TO SECOND
    7 );

    表已创建。

    SQL>

      此时表创建成功,使用了Time,TimeStamp,TimeStampWTZ,TimeStampWTLZ,Interval 五个时间的基本数据类型

          2.查询DBTIMEZONE,SESSIONZONE在系统中的设置。

    View Code
    SQL> desc TIMESTAMP_TEST;
    名称 是否为空? 类型
    ----------------------------------------- -------- ----------------------------
    TIME DATE
    TIMESTAMP TIMESTAMP(3)
    TIMESTAMPWTZ TIMESTAMP(3) WITH TIME ZONE
    TIMESTAMPWLTZ TIMESTAMP(3) WITH LOCAL TIME
    ZONE
    INTERVAL INTERVAL DAY(2) TO SECOND(6)

    SQL>


    SQL> SELECT DBTIMEZONE,SESSIONTIMEZONE FROM DUAL;

    DBTIME
    ------
    SESSIONTIMEZONE
    --------------------------------------------------
    +00:00
    +08:00

      可以发现数据库的时区和会话发起的时区是不同的。

        3.向TimeStamp_Test中插入数据

      

    View Code
    SQL> INSERT INTO  TIMESTAMP_TEST VALUES(SYSDATE,SYSDATE,SYSDATE,SYSDATE,'+06 03:30:16.000000');

    已创建 1 行。

      创建成功。

      4.查看TimeStamp_test中的数据

      

    SQL> select time from timestamp_test;

    TIME
    --------------
    05-2月 -12

    SQL> select timestampwtz from timestamp_test;

    TIMESTAMPWTZ
    -------------------------------------------------
    05-2月 -12 09.32.54.000 下午 +08:00

    SQL> select timestampwtlz from timestamp_test;
    select timestampwtlz from timestamp_test
    *
    1 行出现错误:
    ORA-00904: "TIMESTAMPWTLZ": 标识符无效


    SQL> select timestampwltz from timestamp_test;

    TIMESTAMPWLTZ
    -------------------------------------------------
    05-2月 -12 09.32.54.000 下午



    SQL> select interval from timestamp_test;

    INTERVAL
    -------------------------------------------------
    +06 03:30:16.000000

    SQL>

        5.更改SessionTimeZone 

      

    SQL> alter session set TIME_ZONE='+12:00';

    会话已更改。

        6.查看修改后各种数据类型的值

    View Code
    SQL> select * from timestamp_test;

    TIME
    --------------
    TIMESTAMP
    ---------------------------------------------------------------------------
    TIMESTAMPWTZ
    ---------------------------------------------------------------------------
    TIMESTAMPWLTZ
    ---------------------------------------------------------------------------
    INTERVAL
    ---------------------------------------------------------------------------
    05-2月 -12
    05-2月 -12 09.32.54.000 下午
    05-2月 -12 09.32.54.000 下午 +08:00

    TIME
    --------------
    TIMESTAMP
    ---------------------------------------------------------------------------
    TIMESTAMPWTZ
    ---------------------------------------------------------------------------
    TIMESTAMPWLTZ
    ---------------------------------------------------------------------------
    INTERVAL
    ---------------------------------------------------------------------------
    06-2月 -12 01.32.54.000 上午
    +06 03:30:16.000000


    SQL>

       实验完成

       总结:

      从以上实验可以看出 各种数据类型的区别 TimeStamp在总体的时间粒度小于 Date,但是TimeStamp在不同的时区,其值也用所不同。





  • 相关阅读:
    (四)资源文件分类
    (三)整合SSH测试项目
    (二)搭建SSH环境
    (一)新建一个javaweb项目
    Python学习——使用dict和set
    POJ 2104 K-th number
    bzoj 3669: [Noi2014] 魔法森林 LCT版
    bzoj 3626: [LNOI2014]LCA
    bzoj 2588 Count on a tree
    bzoj 3514: Codechef MARCH14 GERALD07加强版
  • 原文地址:https://www.cnblogs.com/jerryxing/p/2339325.html
Copyright © 2020-2023  润新知