天天看點

管理不同時區的資料

資料庫時區

修改

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的偏置時間