@DATE

您可以使用 @DATE 函數,根據傳入來源資料欄的格式,將各種格式的日期和時間傳回目標資料欄。@DATE 會將幾乎任何類型的輸入轉換成有效的 SQL 日期。@DATE 也可以用來擷取日期資料欄的部分,或根據日期計算數值時戳資料欄。功能

語法

@DATE ('<output_descriptor>', '<input_descriptor>', <source_column>
[, '<input_descriptor>', <source_column>] [, ...])

<'output_descriptor'>

函數的輸出。有效值是由日期描述區和選擇性文字值 (例如空格或冒號) 所組成的字串,目標資料欄需要這些值。可視需要將日期描述區合併在一起。如需日期描述區的描述,請參閱表格 3-1 。格式描述區必須符合目標的 date/time/timestamp 格式。必要時,Oracle GoldenGate 會覆寫指定的格式,使其正確無誤。

<'input_descriptor'>

來源輸入。有效值是由日期描述元與選擇性文字值 (例如空格或冒號) 所組成的字串。可視需要將日期描述區合併在一起。以下為範例:

如需日期說明,請參閱表格 3-1 。

<source_column>

提供以 <input_descriptor> 指定之輸入的數值或字元來源資料欄名稱。

表格 1 日期描述元

描述區 說明 對…有效
副本 百年 輸入 / 輸出
YY 兩位數年份 輸入 / 輸出
`YYYY` 四位數年份 輸入 / 輸出
`MM` 數值月份 輸入 / 輸出
MMM 英數字元月份,例如 APR、OCT 輸入 / 輸出
`DD` 當月固定日數 輸入 / 輸出
DDD 每年固定日數,例如 001 或 365 輸入 / 輸出
DOW0 一週的數值日 (星期日 = 0) 輸入 / 輸出
DOW1 一週的數值日 (星期日 = 1) 輸入 / 輸出
DOWA 一週中的英數字元日,例如 SUN、MON、TUE 輸入 / 輸出
HH 小時 輸入 / 輸出
MI 分鐘 輸入 / 輸出
`SS` 秒數 輸入 / 輸出
JTSLCT 用於已本地時間的儒略曆時間戳記,或是在轉換成儒略曆時間戳記時保留本地時間 。 輸入 / 輸出
時間 Julian 時間戳記,與 JTS. 相同 輸入 / 輸出
`JTS` 儒略曆時間戳記。JUL 和 JTS 會產生數字,您可以在數值表示式中使用。單位為微秒。在 Windows 機器上,值會以零 (0) 填補,因為 Windows 時間戳記的最小單位為毫秒。 輸入 / 輸出
`JUL` 儒略日。JUL 和 JTS 會產生數字,您可以在數值表示式中使用。 輸入 / 輸出
TTS NonStop 48 位元時間戳記 輸入
「PHAMIS」 PHAMIS 申請日期格式 輸入
FFFF 分數 (最多微秒) 輸入 / 輸出
`STRATUS` STRATUS 應用程式時戳 輸入 / 輸出
日期 自紀元起的 C 時間戳記 (秒) 輸入 / 輸出

ISO 8601 日期時間格式支援

Oracle GoldenGate 支援 ISO 8601,這是一種國際認可的格式,代表日期、時間和時區。下列是此 ISO 8601 格式的輸入 / 輸出描述區:

表格 2 日期描述區

描述區 說明 對…有效
ISO8601_DATETIME ISO 8601 日期 - 時間格式 (選擇性時區)。等同於 YYYY-MM-DDTHH:MI:SSTZ。 輸入 / 輸出
ISO8601_DATETIME_FRACT ISO 8601 日期 - 時間格式,可選分數秒數和可選時區。等同於 YYYY-MM-DDTHH:MI:SS.FFFFFFTZ。 輸入 / 輸出
時間 時區規格接受 +/-HH:MI 或區域 ID,例如 America/New_York。 輸入 / 輸出

範例

範例 1

在提供兩位數年份,但是輸出需要四位數年份的實例中,有幾個選項可以取得正確的世紀。

'CC', 19 or 'CC', 20
'CC', @IF (YY > 70, 19, 20)

這會在年份大於 70 時將世紀設為 19,否則會將世紀設為 20。

範例 2

下面會將年、月和日資料欄轉換為日期。

date_col = @DATE ('YYYY-MM-DD', 'YY', date1_yy, 'MM', date1_mm, 'DD', date1_dd)

範例 3

下列會轉換日期與時間,將秒預設為零。

date_col = @DATE ('YYYY-MM-DD HH:MI:00', 'YYMMDD', date1, 'HHMI', time1)

範例 4

以下會將儲存為 YYYYMMDDHHMISS 的數值資料欄轉換成 SQL 日期。

datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'YYYYMMDDHHMISS', numeric_date)

範例 5

以下會將儲存為 YYYYMMDDHHMISS 的數值資料欄轉換成 Julian 時戳。

julian_ts_col = @DATE ('JTS', 'YYYYMMDDHHMISS', numeric_date)

範例 6

下列是將 Julian 時間戳記資料欄轉換為兩個個別的資料欄:格式為 YYYY-MM-DD HH:MI:SS 的日期時間資料欄,以及保留時間戳記之微秒部分的分數資料欄。

datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', jts_field), fraction_col = @DATE ('FFFFFF', 'JTS', jts_field)

範例 7

以下會將儲存為 YYYYMMDDHHMISS 的數值資料欄轉換成 ISO 8601 格式。

iso_datetime_col = @DATE ('YYYY-MM-DDTHH:MI:SSTZ', 'YYYYMMDDHHMISS', numeric_date)

範例 8

以下為完整的時間計算。它會從名稱為 dt 的來源日期資料欄移至名稱為 dt5 的目標資料欄,然後轉換成日期 + 5 小時。計算也會從名稱為 ts 的來源時戳資料欄,轉換成時戳 + 5 小時的目標資料欄 ts5。

MAP scratch.t4, TARGET scratch.t4_copy,
COLMAP ( USEDEFAULTS,
dt5 = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS',
@COMPUTE (@DATE ('JTS', 'YYYY-MM-DD HH:MI:SS', dt) + 18000000000 ) ),
ts5 = @DATE ('YYYY-MM-DD HH:MI:SS.FFFFFF', 'JTS',
@COMPUTE ( @DATE ('JTS', 'YYYY-MM-DD HH:MI:SS.FFFFFF', ts) + 18000000000 ) )
) ;