@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:

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.

'CC', 19 or 'CC', 20
'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.

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 ) )
) ;