@DATE
Verwenden Sie die Funktion @DATE, um Datums- und Uhrzeitangaben in verschiedenen Formaten basierend auf dem in die Quellspalte übergebenen Format in die Zielspalte zurückzugeben. @DATE konvertiert praktisch jeden Eingabetyp in ein gültiges SQL-Datum. @DATE kann auch verwendet werden, um Teile einer Datumsspalte zu extrahieren oder eine numerische Zeitstempelspalte basierend auf einem Datum zu berechnen. Die Funktion
Syntax
@DATE ('<output_descriptor>', '<input_descriptor>', <source_column>
[, '<input_descriptor>', <source_column>] [, ...])
<'output_descriptor'>
Die Ausgabe der Funktion. Der gültige Wert ist eine Zeichenfolge, die aus Datumsdeskriptoren und optionalen Literalwerten, wie Leerzeichen oder Doppelpunkten, besteht, die für die Zielspalte erforderlich sind. Datumsdeskriptoren können nach Bedarf zusammengefügt werden. Eine Beschreibung der Datumsdeskriptoren finden Sie in Tabelle 3-1. Der Formatdeskriptor muss mit dem Format date/time/timestamp für das Ziel übereinstimmen. Oracle GoldenGate setzt das angegebene Format außer Kraft, um es gegebenenfalls zu korrigieren.
<'input_descriptor'>
Die Quelleingabe. Der gültige Wert ist eine Zeichenfolge, die aus Datumsdeskriptoren und optionalen Literalwerten, wie Leerzeichen oder Doppelpunkten, besteht. Datumsdeskriptoren können nach Bedarf zusammengefügt werden. Im Folgenden sind einige Beispiele aufgeführt:
-
Die Deskriptorzeichenfolge
'YYYYMMDD' gibt an, dass die mit<source_column>angegebene Quellspalte (in der Reihenfolge) ein vierstelliges Jahr (YYYY), einen Monat (MM) und einen Tag (DD) enthält. -
Die Deskriptorzeichenfolge
'DD/MM/YY' gibt an, dass die mit<source_column>angegebene Quellspalte den Tag, einen Schrägstrich, den Monat, einen Schrägstrich und das zweistellige Jahr enthält.
Datumsbeschreibungen finden Sie in Tabelle 3-1.
<source_column>
Der Name der numerischen oder Zeichenquellspalte, die die mit <input_descriptor> angegebene Eingabe bereitstellt.
Tabelle 1: Datumsdeskriptoren
| Deskriptor | Beschreibung | Gültig für… |
|---|---|---|
| CC | Jahrhundert | Eingabe/Ausgang |
| JJ | Zweistelliges Jahr | Eingabe/Ausgang |
| `JJJJ` | Vierstelliges Jahr | Eingabe/Ausgang |
| `MM` | Numerischer Monat | Eingabe/Ausgang |
| MMM | Alphanumerischer Monat, wie APR, OCT |
Eingabe/Ausgang |
| `DTT` | Numerischer Tag des Monats | Eingabe/Ausgang |
| DDD | Numerischer Tag des Jahres, wie 001 oder 365 |
Eingabe/Ausgang |
| DOW0 | Numerischer Tag der Woche (Sonntag = 0) |
Eingabe/Ausgang |
| DOW1 | Numerischer Tag der Woche (Sonntag = 1) |
Eingabe/Ausgang |
| DOWA | Alphanumerischer Wochentag, wie SUN, MON, TUE |
Eingabe/Ausgang |
| HH | Stunde | Eingabe/Ausgang |
| MI | Minute | Eingabe/Ausgang |
| `SS` | Sekunden | Eingabe/Ausgang |
| JTSLCT | Wird für einen julianischen Zeitstempel verwendet, der bereits Ortszeit ist, oder um Ortszeit bei der Konvertierung in einen julianischen Zeitstempel beizubehalten. | Eingabe/Ausgang |
| JTSGMT | Julianischer Zeitstempel, gleich JTS. |
Eingabe/Ausgang |
| `JTS` | Julianischer Zeitstempel. JUL und JTS erzeugen Zahlen, die Sie in numerischen Ausdrücken verwenden können. Die Einheit ist Mikrosekunden. Auf einem Windows-Computer wird der Wert mit Nullen (0) aufgefüllt, da die Granularität des Windows-Zeitstempels Millisekunden beträgt. |
Eingabe/Ausgang |
| "JUL" | Julianischer Tag. JUL und JTS erzeugen Zahlen, die Sie in numerischen Ausdrücken verwenden können. |
Eingabe/Ausgang |
| TTS | NonStop 48-Bit-Zeitstempel | Eingabe |
| `PHAMIS` | PHAMIS Datumsformat der Anwendung |
Eingabe |
| FFFFFF | Bruch (bis zu Mikrosekunden) | Eingabe/Ausgang |
| `STRATUS` | STRATUS-Anwendungszeitstempel |
Eingabe/Ausgang |
| Datum | C-Zeitstempel in Sekunden seit der Epoche | Eingabe/Ausgang |
Unterstützung für Datums-/Uhrzeitformate nach ISO 8601
Oracle GoldenGate unterstützt ISO 8601, ein international anerkanntes Format für Datum, Uhrzeit und Zeitzone. Im Folgenden werden die Eingabe-/Ausgabedeskriptoren für dieses ISO 8601-Format aufgeführt:
Tabelle 2: Datumsdeskriptoren
| Deskriptor | Beschreibung | Gültig für… |
|---|---|---|
| ISO8601_DATETIME | ISO 8601 Datums-/Uhrzeitformat mit optionaler Zeitzone. Entspricht YYYY-MM-DDTHH:MI:SSTZ. |
Eingabe/Ausgang |
| ISO8601_DATETIME_FRACT | ISO 8601-Datums-/Uhrzeitformat mit optionalen Sekundenbruchteilen und optionaler Zeitzone. Entspricht YYYY-MM-DDTHH:MI:SS.FFFFFFTZ. |
Eingabe/Ausgang |
| ZEITZN | Die Zeitzonenspezifikation akzeptiert +/-HH:MI oder Region ID, wie America/New_York. |
Eingabe/Ausgang |
Beispiele
Beispiel 1
In einem Fall, in dem ein zweistelliges Jahr geliefert wird, aber ein vierstelliges Jahr in der Ausgabe erforderlich ist, gibt es mehrere Optionen, um das richtige Jahrhundert zu erhalten.
- Das Jahrhundert kann hart codiert werden, wie in:
'CC', 19 or 'CC', 20
- Mit der Funktion
@IFkönnen Sie eine Bedingung festlegen, wie in:
'CC', @IF (YY > 70, 19, 20)
Dies führt dazu, dass das Jahrhundert auf 19 gesetzt wird, wenn das Jahr größer als 70 ist; andernfalls wird das Jahrhundert auf 20 gesetzt.
- Das System kann das Jahrhundert automatisch berechnen. Wenn das Jahr kleiner als 50 ist, berechnet das System ein Jahrhundert von 20; andernfalls wird ein Jahrhundert von 19 berechnet.
Beispiel 2
Im Folgenden werden die Spalten für Jahr, Monat und Tag in ein Datum umgerechnet.
date_col = @DATE ('YYYY-MM-DD', 'YY', date1_yy, 'MM', date1_mm, 'DD', date1_dd)
Beispiel 3
Im Folgenden werden Datum und Uhrzeit konvertiert, wobei Sekunden standardmäßig auf Null gesetzt werden.
date_col = @DATE ('YYYY-MM-DD HH:MI:00', 'YYMMDD', date1, 'HHMI', time1)
Beispiel 4
Im Folgenden wird eine numerische Spalte, die als YYYYMMDDHHMISS gespeichert ist, in ein SQL-Datum konvertiert.
datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'YYYYMMDDHHMISS', numeric_date)
Beispiel 5
Im Folgenden wird eine als YYYYMMDDHHMISS gespeicherte numerische Spalte in einen julianischen Zeitstempel konvertiert.
julian_ts_col = @DATE ('JTS', 'YYYYMMDDHHMISS', numeric_date)
Beispiel 6
Im Folgenden wird eine Julianische Zeitstempelspalte in zwei separate Spalten konvertiert: eine Datetime-Spalte im Format YYYY-MM-DD HH:MI:SS und eine Bruchspalte, die den Mikrosekundenbereich des Zeitstempels enthält.
datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', jts_field), fraction_col = @DATE ('FFFFFF', 'JTS', jts_field)
Beispiel 7
Im Folgenden wird eine numerische Spalte, die als YYYYMMDDHHMISS gespeichert ist, in ein ISO 8601-Format konvertiert.
iso_datetime_col = @DATE ('YYYY-MM-DDTHH:MI:SSTZ', 'YYYYMMDDHHMISS', numeric_date)
Beispiel 8
Im Folgenden wird eine vollständige Berechnung der Zeiten durchgeführt. Sie geht von einer Quelldatumsspalte namens dt zu einer Zielspalte namens dt5, die in das Datum + 5 Stunden konvertiert werden soll. Die Berechnung geht auch von einer Quellzeitstempelspalte mit dem Namen ts zu einer Zielspalte mit dem Namen ts5, die in den Zeitstempel + 5 Stunden konvertiert werden soll.
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 ) )
) ;