Heim  >  Artikel  >  Datenbank  >  oracle增强型时间类型以及postgresql时间类型

oracle增强型时间类型以及postgresql时间类型

WBOY
WBOYOriginal
2016-06-07 15:03:301187Durchsuche

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 1 row created. SQL select * from test_zone; TIMESTAMP_DT ZONE_DT LOCAL_ZONE_DT ----------------------------------- ----------------------------------- ---------------------------------

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入


    1 row created.
    SQL> select * from test_zone;
    TIMESTAMP_DT                        ZONE_DT                             LOCAL_ZONE_DT
    ----------------------------------- ----------------------------------- -----------------------------------
    06-SEP-12 01.50.10.000000 PM        06-SEP-12 01.50.10.000000 PM +08:00 06-SEP-12 01.50.10.000000 PM
    01-JAN-09 12.00.00.000000 AM        01-JAN-09 12.00.00.000000 AM +08:00 01-JAN-09 05.01.01.000000 PM
    SQL> alter session set time_zone='+05:00';
    Session altered.
    SQL> select * from test_zone;
    TIMESTAMP_DT                        ZONE_DT                             LOCAL_ZONE_DT (提前了三个小时)
    ----------------------------------- ----------------------------------- -----------------------------------
    06-SEP-12 01.50.10.000000 PM        06-SEP-12 01.50.10.000000 PM +08:00 06-SEP-12 10.50.10.000000 AM
    01-JAN-09 12.00.00.000000 AM        01-JAN-09 12.00.00.000000 AM +08:00 01-JAN-09 02.01.01.000000 PM
    SQL> select * from v$timezone_names where rownum    TZNAME                                                           TZABBREV
    ---------------------------------------------------------------- ----------------------------------------------------------------
    Africa/Abidjan                                                   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 | 2012-09-06 | 2012-09-06 14:36:31.265579 | 2012-09-06 14:36:31 | 2012-09-06 14:36:31+08
    由此可见,timestamp本身不带时区,但是带精度,如果需要带时区,那么加上with time zone即可
    postgres=# select now()::timestamp(0) without time zone;
    now
    ---------------------
    2012-09-06 14:42:12

  [1] [2] 

oracle增强型时间类型以及postgresql时间类型

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn