@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'>
來源輸入。有效值是由日期描述元與選擇性文字值 (例如空格或冒號) 所組成的字串。可視需要將日期描述區合併在一起。以下為範例:
-
描述區字串
'YYYYMMDD表示以<source_column>指定的來源資料欄包含 (依序) 四位數的年份 (YYYY)、月 (MM) 以及日 (DD)。 -
描述區字串
'DD/MM/YY表示以<source_column>指定的來源資料欄包含日、斜線、月、斜線以及兩位數年份。
如需日期說明,請參閱表格 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
@IF函數可用來設定條件,如下所示:
'CC', @IF (YY > 70, 19, 20)
這會在年份大於 70 時將世紀設為 19,否則會將世紀設為 20。
- 系統會自動計算世紀。如果年份小於 50,系統會計算 20 的世紀;否則會計算 19 的世紀。
範例 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 ) )
) ;