ORACLE时区

本文介绍了Oracle中的时区概念,包括UTC时间、数据库时区、会话时区以及DATE、TIMESTAMP等时区相关数据类型。还列举了DBTIMEZONE、SESSIONTIMEZONE等重要时区函数的用法,帮助理解Oracle数据库中时间的处理和转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时区相关概念

UTC时间,标准时区,其他地区的时区根据时间与UTC的差距,做偏移量,如New York晚于UTC 5小时,则为-5:00。
          Oracle建议将数据库时区设置为UTC。
数据库时区,安装数据库的位置所在的时区,可通过函数DBTIMEZONE获取。
会话时区,用户所在的时区,可通过函数SESSIONTIMEZONE。

时区相关数据类型

 DATE
        TIMESTAMP
                同DATE类型,但是增加了含有小数点的秒,提高精度
        TIMESTAMP WITH TIME ZONE
                类似TIMESTAMP,但附加了TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_REGION, TIMEZONE_ABBR信息。
        
        TIMESTAMP WITH LOCAL TIME ZONE
                与TIMESTAMP,不包含时区相关的数据,当查询TIMESTAMP WITH LOCAL TIME ZONE类型数据时,数据将以用户本地的时区,展示给用户。

几个比较重要的时区函数

1)DBTIMEZONE
                语法:DBTIMEZONE
                参数:无参数
                返回:返回字符类型数据
                作用:返回数据库所在位置的时区
                实例:
                返回当前数据的时区,根据结果可知,当前数据库的时区被设置为UTC
                SQL> select dbtimezone from dual;        (
Dual表是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select中。
                DBTIMEZONE
从DUAL表选择数据常被用来通过SELECT语句计算常数表达式
                ----------
                +00:00
        2) SESSIONTIMEZONE
                语法:SESSIONTIMEZONE
                参数:无参数
                返回:返回字符类型数据
                作用:返回当前会话的时区
                实例:
                SQL> select sessiontimezone from dual;
                SESSIONTIMEZONE
                ------------------------------------------
                +08:00

         3) CURRENT_DATE、CURRENT_TIMESTAMP
                语法:CURRENT_DATE, CURRENT_TIMESTAMP(t)
                参数:CURRENT_DATE无参数;
                      CURRENT_TIMESTAMP中的参数t,指定本地时区小数点后的精度,范围1-9。可选项,默认为6
                返回:CURRENT_DATE返回日期类型的数据;
                      CURRENT_TIMESTAMP返回TIMESTAMP WITH TIME ZONE类型数据
                作用:CURRENT_DATE返回当前日期
                      CURRENT_TIMESTAMP返回会话的时间戳,包含时区信息
                实例:
                SQL> select current_date,current_timestamp from dual;
                CURRENT_DATE CURRENT_TIMESTAMP
                ------------ --------------------------------------
                2011-4-19 14 19-APR-11 02.23.58.545048 PM +08:00
                注:current_date返回的结果其实也包含时分秒(不包含精度),可通过to_char转换函数来获取
                如:
                SQL> select to_char(current_date,'yyyy-mm-dd hh24:mi:ss'),current_timestamp from dual;
                TO_CHAR(CURRENT_DATE,'YYYY-MM- CURRENT_TIMESTAMP
                ------------------------------ ---------------------------------------
                2011-04-19 14:28:22            19-APR-11 02.28.22.258097 PM +08:00
        4) LOCALTIMESTAMP
                语法:LOCALTIMESTAMP(t)
                参数:参数't'指定本地时区小数点后的精度,范围1-9。可选项,默认为6
                返回:返回TIMESTAMP类型的数据,即不包含时区信息
                作用:显示用户会话的本地时间,包含年月日时分秒,及秒的精度值。
                实例:
                SQL> SELECT LOCALTIMESTAMP(4) FROM   DUAL; 
                LOCALTIMESTAMP(4)
                ----------------------------
                19-APR-11 02.32.54.3425 PM
        5) SYSTIMESTAMP
                语法:SYSTIMESTAMP
                参数:无参数
                返回:返回TIMESTAMP WITH TIME ZONE类型的操作系统时间,含精度
                作用:返回TIMESTAMP WITH TIME ZONE类型的系统日期,包含秒的精度
                实例:
                SQL> select systimestamp from dual;
                SYSTIMESTAMP
                -----------------------------------------
                19-APR-11 02.34.15.286712 PM +08:00


实际应用中,习惯将时间以毫秒(ms)形式存储为NUMBER 或者VARCHAR 类型。 使用getTime()函数是以格林威治时间1970-1-1 0:0:0作为参考,故取cn时间就应该考虑到时区问题。常用的将数据库时间转化成字符串的方法

有 TO_CHAR(TO_DATE('1970/01/01','yyyy/mm/dd')+ MYDATE/(1000*60*60*24)+TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24,'YYYY-MM-DD')

//MYDATE是目标时间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值