Oracle之时间、时区

本文介绍了Oracle中时间相关的数据类型,如DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE,详细讲解了设置格式和查询系统时间的方法。此外,还探讨了当数据库时区与操作系统时区不一致时如何调整数据库时区,并提供了查看与修改时区的步骤,注意修改可能遇到的错误及解决办法。

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

时间相关的数据类型

序号数据类型说明使用选择
1DATE存储日期和时间信息,精确到秒所占字节最少,最节省空间
2TIMSTAMPDATE类型的扩展,保留小数级别的秒,默认为小数点后6位所占字节比DATE要多,但比其他两个数据类型少
3TIMESTAMP WITH TIME ZONE存储带时区信息的TIMESTAMP需要保存时区/地区信息的时候使用
4TIMESTAMP WITH LOCAL TIME ZONE和TIMESTAMP WITH TIME ZONE类型的区别:不会保存原时间的时区信息,而是把时间转换为基于数据库时区(database timezone)的时间后存入数据库谨慎使用,不关心操作发生的具体地点,而只关心操作是在当前时区的几点发生

关于这几种数据类型的操作

【DATE】

设置格式:

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

查询系统时间:

SQL> select sysdate from dual;

【TIMESTAMP】

设置格式:

SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YY HH:MI:SSXFF';

查询数据库所在系统时间:

SQL> select localtimestamp from dual;

【TIMESTAMP WITH TIME ZONE】

设置格式:

SQL> ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH:MI:SSXFF AM TZR';

查询数据库所在系统时间(带时区):

SQL> select systimestamp from dual;   

【TIMESTAMP WITH LOCAL TIME ZONE】

设置数据库时区(东8区),需要重启数据库才会生效:

SQL> ALTER SESSION SET TIME_ZONE='+08:00';

查询数据库时区:

SQL> select dbtimezone from dual;   

几种时间函数

序号函数名说明
1DBTIMEZONE数据库时区
2SESSIONTIMEZONE会话时区
3CURRENT_DATE当前会话时间
4CURRENT_TIMESTAMP当前会话时间戳 (带时区)
5SYSDATE系统时间/系统时间
6LOCALTIMESTAMP系统时间戳/系统时间戳
7SYSTIMESTAMP系统时间戳/系统时间戳(带时区)

注:SYSDATE和SYSTIMESTAMP的返回信息是数据库所在操作系统的信息,和当前会话的时区无关!


弄清楚上边的数据类型之后,当数据库时区和当前操作系统时区不一致时,可以修改数据库时区。

查看数据库时区和会话时区

SQL> select dbtimezone,systimestamp from dual;

修改数据时区

SQL> alter database set time_zone='+8:00';   

可能会有以下报错:

ORA-30079: cannot alter database timezone when database has TIMESTAMP WITH LOCAL TIME ZONE columns

从错误提示可以看出数据库中某些字段的数据类型为:TIMESTAMP WITH LOCAL TIME ZONE,只有将这些列删除之后,才能更改。

更改完时区之后需要重启数据库

SQL> shutdown immediate;

SQL> startup;

更新之后,重新查询数据库时区

SQL> select dbtimezone from dual; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值