oracle增强型时间类型以及postgresql时间类型(二)
LMT
Africa/Abidjan GMT
Africa/Accra LMT
Africa/Accra GMT
Africa/Accra GHST
Africa/Addis_Ababa LMT
Africa/Addis_Ababa ADMT
Africa/Addis_Ababa EAT
Africa/Algiers LMT
SQL> select tz_offset('Africa/Accra') from dual;
TZ_OFFS
-------
+00:00
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';--设置会话日期显示格式
SQL> select to_timestamp('20120909 00:01:02.123456789','yyyymmdd hh24:mi:ss.ff') from dual; --to_timestamp函数使用
TO_TIMESTAMP('2012090900:01:02.123456789','YYYYMMDDHH24:MI:SS.FF')
---------------------------------------------------------------------------
09-SEP-12 12.01.02.123456789 AM
SQL> select to_timestamp_tz('20120909 00:01:02.123456789 0:0','yyyymmdd hh24:mi:ss.ff tzh:tzm') from dual; --to_timestamp_tz使用
TO_TIMESTAMP_TZ('2012090900:01:02.1234567890:0','YYYYMMDDHH24:MI:SS.FFTZH:T
---------------------------------------------------------------------------
09-SEP-12 12.01.02.123456789 AM +00:00
postgresql时间类型:9.1.2版本
名字
存储空间
描述
最低值
最高值
分辨率
timestamp[无时区]
8字节
包括日期和时间
4713 BC
5874897AD
1毫秒/14位
timestamp[含时区] with time zone
8字节
日期和时间,带时区
4713 BC
5874897AD
1毫秒/14位
interval
12字节
时间间隔
-178000000年
178000000年
1毫秒/14位
date
4字节
只用于日期
4713 BC
32767AD
1天
time[无时区]
8字节
只用于一日内时间
00:00:00
24:00:00
1毫秒/14位
postgres=# select current_timestamp; --可以看到精度6位,显示时区+8,和oracle的timestamp with time zone类型是一致的
now
-------------------------------
2012-09-06 14:04:51.363932+08
postgres=# create table test_t (time_col time,date_col date,timestamp_col timestamp);类型区别
CREATE TABLE
postgres=# insert into test_t values(now(),now(),now());
INSERT 0 1
postgres=# select * from test_t;
time_col | date_col | timestamp_col
-----------------+------------+----------------------------
14:19:24.277477 | 2012-09-06 | 2012-09-06 14:19:24.277477
(1 row)
精度和时区的控制:
postgres=# create table test_t1 (time_col time,date_col date,timestamp_col timestamp,timestamp_col0 timestamp(0) without time zone);
CREATE TABLE
postgres=# insert into test_t1 values(now(),now(),now(),now());
INSERT 0 1
postgres=# select * from test_t1;
time_col | date_col | timestamp_col | timestamp_col0
-----------------+------------+----------------------------+---------------------
14:34:59.840947 | 2012-09-06 | 2012-09-06 14:34:59.840947 | 2012-09-06 14:35:00
postgres=# alter table test_t1 add column timestamp_col1 timestamp(0) with time zone;
ALTER TABLE
postgres=# insert into test_t1 values(now(),now(),now(),now(),now());
INSERT 0 1
postgres=# select * from test_t1;
time_col | date_col | timestamp_col | timestamp_col0 | timestamp_col1
-----------------+------------+----------------------------+---------------------+------------------------
14:34:59.840947 | 2012-09-06 | 2012-09-06 14:34:59.840947 | 2012-09-06 14:35:00 |
14:36:31.265579 | 20