首页 > Linux操作系统 > Linux操作系统 > 【SQL】四种时间数据类型的对比
1)DATE:年月日时分秒
2)TIMESTAMP:在date的基础上加上了毫秒(默认6位毫秒)
3)TIMESTAMP WITH TIME ZONE:带有时区的TIMESTAMP
4)TIMESTAMP WITH LOCAL TIME ZONE:带有本地时区的TIMESTAMP。
前三个都很好理解,第四个,带有本地时区,稍微有点儿不好理解,我们用例子来理解一下第四个数据类型
一.创建测试表t_timestamp
SCOTT@ORA11GR2>create table t_timestamp
(
t1 date,
t2 timestamp,
t3 timestamp with time zone,
t4 timestamp with local time zone
);
Table created.
SCOTT@ORA11GR2>
二.查看当前会话的时区
SCOTT@ORA11GR2>select sessiontimezone from dual;
SESSIONTIMEZONE
---------------
+08:00
SCOTT@ORA11GR2>
三.所有字段都插入系统时间
SCOTT@ORA11GR2>insert into t_timestamp values(sysdate,sysdate,sysdate,sysdate);
1 row created.
SCOTT@ORA11GR2>commit;
Commit complete.
SCOTT@ORA11GR2>
四.由于时间字段都比较宽,一行显示不全,所以,每个字段单独显示一下结果
SCOTT@ORA11GR2>select to_char(t1,'yyyy-mm-dd hh24:mi:ss') from t_timestamp;
TO_CHAR(T1,'YYYY-MM
-------------------
2012-09-19 21:14:24
SCOTT@ORA11GR2>
SCOTT@ORA11GR2>select to_char(t2,'yyyy-mm-dd hh24:mi:ssxff am') from t_timestamp;
TO_CHAR(T2,'YYYY-MM-DDHH24:MI:SS
--------------------------------
2012-09-19 21:14:24.000000 pm
SCOTT@ORA11GR2>
SCOTT@ORA11GR2>select to_char(t3,'yyyy-mm-dd hh24:mi:ssxff am tzh:tzm') from t_timestamp;
TO_CHAR(T3,'YYYY-MM-DDHH24:MI:SSXFFAMTZ
---------------------------------------
2012-09-19 21:14:24.000000 pm +08:00
SCOTT@ORA11GR2>
SCOTT@ORA11GR2>select to_char(t4,'yyyy-mm-dd hh24:mi:ssxff am') from t_timestamp;
TO_CHAR(T4,'YYYY-MM-DDHH24:MI:SS
--------------------------------
2012-09-19 21:14:24.000000 pm
SCOTT@ORA11GR2>
五.修改当前会话的时区为东六区
SCOTT@ORA11GR2>alter session set time_zone = '+6:0';
Session altered.
SCOTT@ORA11GR2>select sessiontimezone from dual;
SESSIONTIMEZONE
---------------
+06:00
SCOTT@ORA11GR2>
六.再次分别显示每一个字段的结果,看一看修改了会话的时区后,时间是否有变化
1)date数据类型的时间没什么变化
SCOTT@ORA11GR2>select to_char(t1,'yyyy-mm-dd hh24:mi:ss') from t_timestamp;
TO_CHAR(T1,'YYYY-MM
-------------------
2012-09-19 21:14:24
SCOTT@ORA11GR2>
2) timestamp 数据类型的时间没什么变化
SCOTT@ORA11GR2>select to_char(t2,'yyyy-mm-dd hh24:mi:ssxff am') from t_timestamp;
TO_CHAR(T2,'YYYY-MM-DDHH24:MI:SS
--------------------------------
2012-09-19 21:14:24.000000 pm
SCOTT@ORA11GR2>
3)TIMESTAMP WITH TIME ZONE数据类型的时间没什么变化
SCOTT@ORA11GR2>select to_char(t3,'yyyy-mm-dd hh24:mi:ssxff am tzh:tzm') from t_timestamp;
TO_CHAR(T3,'YYYY-MM-DDHH24:MI:SSXFFAMTZ
---------------------------------------
2012-09-19 21:14:24.000000 pm +08:00
SCOTT@ORA11GR2>
4)TIMESTAMP WITH LOCAL TIME ZONE数据类型发生了变化,发现比在没修改时区的时候,少了 两 个小时,正是我们由东八区改为东六区所差的两个小时,也就是说,这种数据类型显示的时间会根据写入地区的时区和当前会话的时区自动转换时间,显示数据写入时当前会话所在时区的时间。
SCOTT@ORA11GR2>select to_char(t4,'yyyy-mm-dd hh24:mi:ssxff am') from t_timestamp;
TO_CHAR(T4,'YYYY-MM-DDHH24:MI:SS
--------------------------------
2012-09-19 19:14:24.000000 pm
SCOTT@ORA11GR2>
小结:
除了date数据类型外,其他几种日期数据类型存储的更加细致,在使用的时候,我们一定要充分理解它们之间的区别,以便更好的利用它们的特性。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/685769/viewspace-744263/ ,如需转载,请注明出处,否则将追究法律责任。