天天看点

管理不同时区的数据

数据库时区

修改

ALTER DATABASE SET TIME_ZONE = '-05:00';

ALTER DATABASE SET TIME_ZONE = dbtimezone;

ALTER DATABASE SET TIME_ZONE = local;

ALTER DATABASE SET TIME_ZONE = 'America/New_York';

验证

SELECT DBTIMEZONE FROM DUAL;

会话时区

ALTER SESSION SET TIME_ZONE = '-05:00';

ALTER SESSION SET TIME_ZONE = dbtimezone;

ALTER SESSION SET TIME_ZONE = local;

ALTER SESSION SET TIME_ZONE = 'America/New_York';

SELECT SESSIONTIMEZONE FROM DUAL;

函数

说明

CURRENT_DATE

语法:CURRENT_DATE()

说明:查询当前时间

current_date返回的是当前会话时间,而sysdate返回的是服务器时间。

current_date有时比sysdate快一秒,这可能是四舍五入的结果。

如果修改当前会话的时区,比如将中国的时区为东八区,修改为东九区,则current_date显示的时间为东九区时间,根据东加西减的原则,current_date应该比sysdate快一小时。

例句:

CURRENT_TIMESTAMP

语法:CURRENT_TIMESTAMP()

说明:以timestamp with time zone数据类型返回当前会话时区中的当前日期

例句:

LOCALTIMESTAMP

语法:LOCALTIMESTAMP()

说明:以本地timestamp数据类型返回当前会话时区中的当前日期

EXTRACT

语法:

EXTRACT (

  { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }

  | { TIMEZONE_HOUR | TIMEZONE_MINUTE }

  | { TIMEZONE_REGION | TIMEZONE_ABBR }

  FROM { date_value | interval_value } )

说明:

我们只可以从一个date类型中截取 year,month,day(date日期的格式为yyyy-mm-dd);

我们只可以从一个 timestamp with time zone 的数据类型中截取TIMEZONE_HOUR和TIMEZONE_MINUTE;

例一:

例二:

FROM_TZ

语法:FROM_TZ(x,time_zone)

说明:把指定的时间戳和日期转换为timestamp with time zone类型

TO_DSINTERVAL

语法:TO_DSINTERVAL(C)

说明:将符合特定格式的字符串C转换成INTERVALDAY TO SECOND类型的数据

TO_TIMESTAMP

语法:TO_TIMESTAMP(x[,format])

说明:把字串表达式X转换成timestamp类型可以使用format指定格式

TO_TIMESTAMP_TZ

语法:TO_TIMESTAMP_TZ(x[,format])

说明:把字串表达式X转换成timestamp with time zone类型可以使用format指定格式

TO_YMINTERVAL

语法:TO_YMINTERVAL(C)

说明:将符合特定格式的字符串C转换成INTERVALYEAR TO MONTH类型的数据

TZ_OFFSET

语法:TZ_OFFSET(time_zone)

说明:按照最小时哈分钟返回time_zone的偏置时间