OceanBase TIMESTAMP WITH TIME ZONE 數(shù)據(jù)類型

2021-06-29 15:00 更新

?TIMESTAMP [(scale)] WITH TIME ZONE? 是 ?TIMASTAMP [(scale)]? 的變體,與 ?TIMASTAMP [(scale)] ?一樣,它存儲了年、月、日、時、分和秒等信息,閾值和精確度取決于 ?scale? 的值。但是與 ?TIMASTAMP [(scale)]? 不同的是它還可以存儲時區(qū)信息,所以常用于存儲跨地理區(qū)域的日期時間信息。

語法

TIMESTAMP [(scale)] WITH TIME ZONE

參數(shù)

參數(shù)

取值范圍

說明

scale

0~9

TIMESTAMP [(scale)] WITH TIME ZONE 的閾值和精確度取決于 scale 的值,最大值為 9 (納秒,即秒數(shù)精確至小數(shù)點(diǎn) 9 位),最小值為 0(秒,即秒數(shù)精確至小數(shù)點(diǎn) 0 位),默認(rèn)值為 6。

格式

?TIMESTAMP WITH TIME ZONE? 數(shù)據(jù)類型的默認(rèn)輸入輸出格式由 ?NLS_TIMESTAMP_TZ_FORMAT? 決定,運(yùn)行以下 SQL 語句查看默認(rèn)格式:

SELECT @@NLS_TIMESTAMP_TZ_FORMAT FROM DUAL;

返回結(jié)果:

DD-MON-RR HH.MI.SSXFF AM TZR

如果您需要自定義數(shù)據(jù)的格式,可以使用轉(zhuǎn)換函數(shù)。在插入數(shù)據(jù)時,您可以通過函數(shù) ?TO_TIMESTAMP_TZ (char,fmt)? 指定數(shù)據(jù)的輸入格式。查詢數(shù)據(jù)時,您可以通過函數(shù) ?TO_CHAR (datetime,fmt) ?指定數(shù)據(jù)的輸出格式。這兩個轉(zhuǎn)換函數(shù)會將字符串轉(zhuǎn)化為參數(shù) ?fmt? 中定義的格式。在 ?fmt? 未指明的情況下,使用默認(rèn)格式。

取值范圍

?0001-01-01 00:00:00.000000000? ~ ?9999-12-31 23:59:59.999999999?

示例

以下示例都使用 ?TO_TIMESTAMP_TZ (char,fmt)? 輸入時間戳值。

在插入時區(qū)時, OceanBase 支持使用時區(qū)偏移量和時區(qū)區(qū)域名稱:

  • 時區(qū)偏移量:與格林尼治標(biāo)準(zhǔn)時間 GMT 的差(小時和分鐘)
  • 時區(qū)區(qū)域名稱(TZR)及時區(qū)縮寫(TZD):國家/城市 時區(qū)縮寫

使用時區(qū)偏移量

執(zhí)行以下語句,使用時區(qū)偏移量插入數(shù)值:

SELECT TO_TIMESTAMP_TZ('2020-01-01 11:00:00 -05:00','YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;

返回結(jié)果:

01-JUN-20 11.00.00.000000000 AM AMERICA/LOS_ANGELES

使用時區(qū)區(qū)域名稱及時區(qū)縮寫

執(zhí)行以下語句,使用時區(qū)區(qū)域名稱及縮寫插入數(shù)值:

SELECT TO_TIMESTAMP_TZ('2020-01-01 11:00:00 America/Los_Angeles PST','YYYY-MM-DD HH:MI:SS TZR TZD') FROM DUAL;

返回結(jié)果:

01-JUN-20 11.00.00.000000000 AM America/Los_Angeles PST

夏令時

OceanBase 支持夏令時且用時區(qū)縮寫表示夏令時信息,以 America/Los_Angeles 為例,夏令時 PDT 從每年的 3 月的第二個星期日到 11 月的第一個星期日執(zhí)行,其余時間為 PST。當(dāng)插入的值中只包含時區(qū)區(qū)域名稱時,OceanBase 會根據(jù)插入的時間信息判斷當(dāng)前插入的時區(qū)區(qū)域是否在夏令時時段,并在返回的結(jié)果中會包含時區(qū)縮寫,以此指明當(dāng)前時間是夏令時。

您可以執(zhí)行以下示例代碼:

SELECT TO_TIMESTAMP_TZ('2020-02-01 11:00:00 America/Los_Angeles','YYYY-MM-DD HH:MI:SS TZR') FROM DUAL;
SELECT TO_TIMESTAMP_TZ('2020-06-01 11:00:00 America/Los_Angeles','YYYY-MM-DD HH:MI:SS TZR') FROM DUAL;

返回結(jié)果:

01-JUN-20 11.00.00.000000000 AM America/Los_Angeles PST
01-JUN-20 11.00.00.000000000 AM America/Los_Angeles PDT


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號