时区:时区是当地时间与英格兰格林威治时间的时差。
一:与时区有关的函数:
1.CURRENT_DATE:返回在为数据库会话设置的本地时区中的当前时间。
select CURRENT_DATE from dual;
CURRENT_DATE
-----------------
2017/11/6 9:08:57
2.DBTIMEZONE 返回数据库的时区
select DBTIMEZONE from dual;
DBTIMEZONE
-----------------
+08:00
3.NEW_TIME(x, time_zone, time_zone2):将x从time_zone转换为time_zone2,并返回新的时间值
4.SESSIONTIMEZONE:返回数据库会话的时区
select SESSIONTIMEZONE from dual;
SESSIONTIMEZONE
-----------------
+08:00
5.TZ_OFFSET:以小时和分钟的形式返回time_zone时差
获取PST时区的时差,结果是UTC之后8小时。
select TZ_OFFSET('PST') from dual;
TZ_OFFSET('PST')
-----------------
-08:00
注意:在使用windows系统时,如果是夏天,应该为-7:00,因为windows系统会自动将时钟调整到夏令时。
6.查询所有的时区名:
select tzname, tzabbrev
from v$timezone_names
order by tzabbrev;
--------------------
Africa/Accra GHST
Africa/Accra GMT
.....
二:数据库时区与会话时区
1.数据库时区
数据库的时区称为数据库时区datebase time zone
数据库时区由TIME_ZONE控制,DBA可以在数据库的init.ora或spfile.ora文件中进行修改TIME_ZONE参数的设置,
也可以使用以下命令来进行修改:
ALTER DATABASE SET TIME_ZONE = offset | region
例如:
ALTER DATABASE SET TIME_ZONE = '-8:00';
将本地时区改为太平洋标准时间:
ALTER DATABASE SET TIME_ZONE = 'PST';
将本地时区改为运行alter session语句的计算机操作系统所用的时区:
ALTER DATABASE SET TIME_ZONE = 'LOCAL';
将本地时区改为数据库所用时区:
ALTER DATABASE SET TIME_ZONE = 'DBTIMEZONE';
2.会话时区
数据库会话的时区设置称为会话时区session time zone
默认会话时区与操作系统时区相同
修改方式:
ALTER SESSION SET TIME_ZONE = 'EST';
查询会话时区:
select SESSIONTIMEZONE from dual;
SESSIONTIMEZONE
-----------------
+08:00