管理不同时区的数据

一、设置时区

1、数据库时区
 a) 修改
  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';
 b) 验证
  SELECT DBTIMEZONE FROM DUAL;
2、会话时区
 a) 修改
  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';
 b) 验证
  SELECT SESSIONTIMEZONE FROM DUAL;

二、时间数据类型

函数 说明
CURRENT_DATE 语法:CURRENT_DATE()
说明:查询当前时间
current_date返回的是当前会话时间,而sysdate返回的是服务器时间。
current_date有时比sysdate快一秒,这可能是四舍五入的结果。
如果修改当前会话的时区,比如将中国的时区为东八区,修改为东九区,则current_date显示的时间为东九区时间,根据东加西减的原则,current_date应该比sysdate快一小时。
例句:
  1. select current_date, sysdate from dual;
CURRENT_TIMESTAMP 语法:CURRENT_TIMESTAMP()
说明:以timestamp with time zone数据类型返回当前会话时区中的当前日期
例句:
  1. SELECT CURRENT_TIMESTAMP
  2.   FROM DUAL;
LOCALTIMESTAMP 语法:LOCALTIMESTAMP()
说明:以本地timestamp数据类型返回当前会话时区中的当前日期
例句:
  1. SELECT LOCALTIMESTAMP
  2.   FROM DUAL;
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;
例句:
例一:
  1. SELECT EXTRACT(year FROM DATE '2011-05-17') "year",
  2. EXTRACT(month FROM DATE '2011-05-17') "month",
  3. EXTRACT(day FROM DATE '2011-05-17') "day"
  4. FROM DUAL;
例二:
  1. SELECT EXTRACT(day FROM dt2-dt1) "day",
  2.        EXTRACT(hour FROM dt2-dt1) "hour",
  3.        EXTRACT(minute FROM dt2-dt1) "minute",
  4.        EXTRACT(second FROM dt2-dt1) "second"
  5. FROM (SELECT TO_TIMESTAMP('2011-02-04 15:07:00',
  6.                           'yyyy-mm-dd hh34:mi:ss') dt1,
  7.              TO_TIMESTAMP('2011-05-17 19:08:46',
  8.                           'yyyy-mm-dd hh34:mi:ss') dt1
  9.       FROM DUAL);
FROM_TZ 语法:FROM_TZ(x,time_zone)
说明:把指定的时间戳和日期转换为timestamp with time zone类型
例句:
  1. SELECT FROM_TZ(TO_TIMESTAMP('19880719','YYYYMMDD'),
  2.                'America/Sao_Paulo')
  3.   FROM DUAL;
TO_DSINTERVAL 语法:TO_DSINTERVAL(C)
说明:将符合特定格式的字符串C转换成INTERVALDAY TO SECOND类型的数据
例句:
  1. SELECT SYSDATE + TO_DSINTERVAL('1000:00:00') A
  2.   FROM DUAL;
TO_TIMESTAMP 语法:TO_TIMESTAMP(x[,format])
说明:把字串表达式X转换成timestamp类型可以使用format指定格式
例句:
  1. SELECT TO_TIMESTAMP('19880719','YYYYMMDD')
  2.   FROM DUAL;
TO_TIMESTAMP_TZ 语法:TO_TIMESTAMP_TZ(x[,format])
说明:把字串表达式X转换成timestamp with time zone类型可以使用format指定格式
例句:
  1. SELECT TO_TIMESTAMP_TZ('1988-07-19 07:10:10.12320',
  2.                        'YYYY-MM-dd HH24:MI:SS.FF') A
  3.   FROM DUAL;
TO_YMINTERVAL 语法:TO_YMINTERVAL(C)
说明:将符合特定格式的字符串C转换成INTERVALYEAR TO MONTH类型的数据
例句:
  1. SELECT SYSDATE+TO_YMINTERVAL('01-13') A
  2.   FROM DUAL;
TZ_OFFSET 语法:TZ_OFFSET(time_zone)
说明:按照最小时哈分钟返回time_zone的偏置时间
例句:
  1. SELECT TZ_OFFSET('America/New_York')
  2.   FROM DUAL;

创新互联是一家从事企业网站建设、成都网站建设、网站设计、行业门户网站建设、网页设计制作的专业网站设计公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点1000多家。


本文名称:管理不同时区的数据
URL分享:http://hbruida.cn/article/jejgcc.html