Kategorien:

Datums- und Uhrzeitfunktionen

TIMESTAMP_FROM_PARTS

Erstellt einen Zeitstempel aus einzelnen numerischen Komponenten. Wenn keine Zeitzone aktiv ist, kann mithilfe der Funktion aus einem Datums- und einem Zeitausdruck ein Zeitstempel erstellt werden.

Aliasse:

TIMESTAMPFROMPARTS

Varianten (und Aliasse):

TIMESTAMP_LTZ_FROM_PARTS , TIMESTAMPLTZFROMPARTS

TIMESTAMP_NTZ_FROM_PARTS , TIMESTAMPNTZFROMPARTS

TIMESTAMP_TZ_FROM_PARTS , TIMESTAMPTZFROMPARTS

Syntax

TIMESTAMP_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond> ] [, <time_zone> ] )

TIMESTAMP_FROM_PARTS( <date_expr>, <time_expr> )
TIMESTAMP_LTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )
TIMESTAMP_NTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )

TIMESTAMP_NTZ_FROM_PARTS( <date_expr>, <time_expr> )
TIMESTAMP_TZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] [, <time_zone>] )

Bemerkung

Die Datums- und Zeitausdrucksversion von TIMESTAMP_FROM_PARTS ist nur gültig, wenn der Sitzungsparameter TIMESTAMP_TYPE_MAPPING auf TIMESTAMP_NTZ gesetzt ist.

Argumente

Benötigt:

Jahr

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Jahr verwendet wird.

Monat

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Monat verwendet wird, wobei Januar als 1 und Dezember als 12 dargestellt werden.

Tag

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Tag verwendet wird, normalerweise im Bereich 1-31.

Stunde

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Stunde verwendet wird, normalerweise im Bereich 0-23.

Minute

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Minute verwendet wird, normalerweise im Bereich 0-59.

Sekunde

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Sekunde verwendet wird, normalerweise im Bereich 0-59.

Datumsausdruck, Zeitausdruck

Geben die Datums- und Zeitausdrücke an, die zum Erstellen eines Zeitstempels verwendet werden sollen, wobei Datumsausdruck Jahr, Monat und Tag und Zeitausdruck Stunde, Minute, Sekunde und Nanosekunden innerhalb des Tags für den Zeitstempel angeben. Gilt nur für:

  • TIMESTAMP_FROM_PARTS (wenn der Sitzungsparameter TIMESTAMP_TYPE_MAPPING auf TIMESTAMP_NTZ gesetzt ist)

  • TIMESTAMP_NTZ_FROM_PARTS

Optional:

Nanosekunden

Ein ganzzahliger Ausdruck, der beim Erstellen eines Zeitstempels als Nanosekunde verwendet wird, normalerweise im Bereich 0-999999999.

Zeitzone

Ein Zeichenfolgenausdruck, der beim Erstellen eines Zeitstempels als Zeitzone verwendet wird (z. B. America/Los_Angeles). Gilt nur für:

  • TIMESTAMP_FROM_PARTS (wenn der Sitzungsparameter TIMESTAMP_TYPE_MAPPING auf TIMESTAMP_TZ gesetzt ist)

  • TIMESTAMP_TZ_FROM_PARTS

Nutzungshinweise

  • TIMESTAMP_FROM_PARTS-Varianten werden normalerweise genutzt, um Werte in den „normalen“ Wertebereichen zu verarbeiten (z. B. Monate 1-12, Tage 1-31, Stunden 0-23 usw.); sie können jedoch auch Werte außerhalb dieser Bereiche verarbeiten. Dies ermöglicht die Auswahl des N-ten Tages in einem Jahr oder der N-ten Sekunde an einem Tag, was zur Vereinfachung einiger Berechnungen beiträgt.

  • TIMESTAMP_FROM_PARTS entspricht der durch den Sitzungsparameter TIMESTAMP_TYPE_MAPPING angegebenen Variante (Standardwert ist TIMESTAMP_LTZ).

Beispiele

Festlegen der Sitzungsvariablen, die das Ausgabeformat und die Zeitzone steuern:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMEZONE='America/New_York';

Verwenden von TIMESTAMP_LTZ_FROM_PARTS:

SELECT TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00);
+--------------------------------------------------+
| TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|--------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400              |
+--------------------------------------------------+

Verwenden von TIMESTAMP_NTZ_FROM_PARTS:

select timestamp_ntz_from_parts(2013, 4, 5, 12, 00, 00, 987654321);
+-------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 987654321) |
|-------------------------------------------------------------|
| 2013-04-05 12:00:00.987654321                               |
+-------------------------------------------------------------+

Verwenden von TIMESTAMP_NTZ_FROM_PARTS mit einem Datum und einer Uhrzeit anstatt mit Jahr, Monat, Tag, Stunde usw.:

select timestamp_ntz_from_parts(to_date('2013-04-05'), to_time('12:00:00'));
+----------------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(TO_DATE('2013-04-05'), TO_TIME('12:00:00')) |
|----------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000                                        |
+----------------------------------------------------------------------+

Verwenden von TIMESTAMP_TZ_FROM_PARTS mit einer Standardzeitzone der Sitzung (‚America/New_York‘/-0400):

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00);
+-------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|-------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400             |
+-------------------------------------------------+

Verwenden von TIMESTAMP_TZ_FROM_PARTS mit einer bestimmten Zeitzone (‚America/Los_Angeles‘/-0700). Beachten Sie auch die Verwendung von 0 als Nanosekunden-Argument:

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00, 0, 'America/Los_Angeles');
+---------------------------------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 0, 'AMERICA/LOS_ANGELES') |
|---------------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0700                                       |
+---------------------------------------------------------------------------+

Verarbeiten von Werten, die außerhalb normaler Bereiche liegen (mit Abzug von 1 Stunde durch Angabe von -3600 Sekunden):

select timestamp_from_parts(2013, 4, 5, 12, 0, -3600);
+------------------------------------------------+
| TIMESTAMP_FROM_PARTS(2013, 4, 5, 12, 0, -3600) |
|------------------------------------------------|
| 2013-04-05 11:00:00.000000000                  |
+------------------------------------------------+