zoukankan      html  css  js  c++  java
  • Oracle 时区(TimeZone ) 数据类型

    不 同数据类型的区别

    使用 DBTimeZone 察看数据库所在的时区

    SQL> select dbtimezone from dual;

    DBTIMEZONE

    ----------

    +08:00

    找2个典型的美国时区

    SQL> select tz_offset('US/Eastern'),tz_offset('US/Mountain') from dual;

    TZ_OFFSET('US/EASTERN') TZ_OFFSET('US/MOUNTAIN')

    ----------------------- ------------------------

    -05:00                  -07:00

    建立表,包含不同类型的三个column

    create table tstz(ts timestamp, tstz timestamp with time zone, tsltz timestamp with local time zone);

    insert into tstz values(systimestamp,systimestamp,systimestamp);

    commit

     
    下面构造一个场景,用三个不同的时区的session来查询同样的数据

    SQL>

    SQL> alter session set NLS_TIMESTAMP_TZ_FORMAT = 'yyyy/mm/dd hh24:mi:ssxff TZH:TZM';

    SQL> alter session set NLS_TIMESTAMP_FORMAT = 'yyyy/mm/dd hh24:mi:ssxff';

    使用 SessionTimeZone 察看当前session的时区信息

    SQL> select sessiontimezone from dual;

    SESSIONTIMEZONE

    ---------------------------------------------------------------------------

    +08:00

    SQL> select * from tstz;

    TS                                                TSTZ                                              TSLTZ  +08:00

    ------------------------------------------------- ------------------------------------------------- -------------------------------------------------

    2008/03/29 10:14:10.774754                        2008/03/29 10:14:10.774754 +08:00                 2008/03/29 10:14:10.774754

    SQL> alter session set time_zone = 'US/Mountain';

    SQL> select * from tstz;

    TS                                                TSTZ                                              TSLTZ  -07:00

    ------------------------------------------------- ------------------------------------------------- -------------------------------------------------

    2008/03/29 10:14:10.774754                        2008/03/29 10:14:10.774754 +08:00                 2008/03/28 19:14:10.774754

    SQL> alter session set time_zone = 'US/Eastern';

    SQL> select * from tstz;

    TS                                                TSTZ                                              TSLTZ  -05:00

    ------------------------------------------------- ------------------------------------------------- -------------------------------------------------

    2008/03/29 10:14:10.774754                        2008/03/29 10:14:10.774754 +08:00                 2008/03/28 21:14:10.774754

    从 高亮部分可以发现

    timestamp with time zone 保存了insert的时区, 并且不 论在什么地方查询,显示结果都是一致的

    timestamp with local time zone 保存的是一个内部的时区信息, 在不同 时区进行查询,都会自动转换成当前时区进行显示。

    因为修改了session的时 区信息,所以系统时区和当前session时区不同

    SQL> select systimestamp, current_timestamp, localtimestamp from dual;

    SYSTIMESTAMP                                      CURRENT_TIMESTAMP                                 LOCALTIMESTAMP

    ------------------------------------------------- ------------------------------------------------- -------------------------------------------------

    2008/03/29 15:59:37.400640 +08:00                 2008/03/29 02:59:37.400646 -05:00                 2008/03/29 02:59:37.400646

    作者:wait4friend
    Weibo:@wait4friend
    Twitter:@wait4friend
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Python3 WebDriver操作cookie的方法
    Windows创建定时任务执行Python脚本
    Python3 自定义请求头消息headers
    为什么SQL用UPDATE语句更新时更新行数会多3行有触发器有触发器有触发器有触发器有触发器有触发器
    【C#】C#获取文件夹下的所有文件
    jQuery.ajax()调用asp.net后台方法(非常重要)
    Asp.Net+JQuery.Ajax之$.post
    c# post 接收传来的文件
    C#使用GET、POST请求获取结果,这里以一个简单的用户登陆为例。
    javascript中let和var的区别
  • 原文地址:https://www.cnblogs.com/wait4friend/p/2345329.html
Copyright © 2011-2022 走看看