SQLScript Grundlagen

Datum und Zeit in SQLScript

(C) Brandeis Consulting.

Datentypen für Datum und Zeit

  • DATE speichert ein Datum
  • TIME speichert eine Uhrzeit
  • SECONDDATE speichert ein Kombination aus Datum und Uhrzeit
  • TIMESTAMP speichert einen Zeitstempel aus Datum, Uhrzeit und Sekundenbruchteilen

Über das interne Format, wie in ABAP, ist nichts bekannt. Darum wird immer nur per SQL-Funktion mit den Zeit-Datentypen gearbeitet.

(C) Brandeis Consulting.

DATS ist eine Zeichenkette

Für die SAP HANA ist der ABAP Datentyp DATS einfach eine Zeichenkette.

Solange der Wert unverändert bleibt oder nur verglichen werden muss, z.B. zum Filtern, kann man den 1:1 verwenden.

Für alle Berechnungen müssen wir zunächst DATS in DATE konvertieren und dann mit SQL-Funktionen rechnen. Falls das Ergebnis wieder ein Datum ist, muss das mit der SQL-Funktion TO_DATS() in den Datentypen DATS konvertiert werden.

Das gilt analog auch für TIMS und Timestamps.

(C) Brandeis Consulting.

Default-Format

Jeder Datentyp hat ein Default-Format, in das er durch die Funktion TO_VARCHAR() konvertiert wird. Dieses kann per SESSION_CONTEXT verändert werden. Darum gelten folgende Vorsichtsregeln:

Das Format sollte im AMDP, insbesondere in Transformationsroutinen nie verändert werden.
Bei Konvertierungen in eine Zeichenkette geben wir immer die gewünschte Formatierung mit.

DATE

YYYY-MM-DD

SECONDDATE

YYYY-MM-DD HH24:MI:SS

TIME

HH24:MI:SS

TIMESTAMP

YYYY-MM-DD HH24:MI:SS.FF7

(C) Brandeis Consulting.

Explizites Konvertieren in eine Zeichenkette

TO_VARCHAR( <Wert>, [, <Format>] )
TO_NVARCHAR( <Wert>, [, <Format>] )

Unit Symbol Description
Year YYYY year, 4 digits
YY year, 2 digits
Quarter Q numeric
Month MM numeric, 2-digit
MONTH name in EN
MON abbreviation in EN
RM roman spelling
Week W W. in the month
WW W. in the year
Unit Symbol Description
Day D numeric
DD numeric, 2-digit
DAY name in EN
DY abbreviation in EN
Hour HH12 12h time without AM/PM
HH24 hours (0-23)
AM / PM morning or afternoon
Minute MI numeric, 2-digit
Second SS numeric, 2-digit
SSSSS sec. after midnight
FF[1..7] digits of sec. N-digit
(C) Brandeis Consulting.

Konvertierung in Datum und Zeit

Implizite Konvertierung und Standardformate

SQL erkennt viele Formate automatisch. Z.B. das DATS Format kann direkt verwendet werden.

Beispiel

select add_days('20230724', 1) from dummy;

Explizite Konvertierung

Falls es sich um besondere Datumsformate handelt, ist eine explizite Konvertierung mit den entsprechenden SQL-Funktionen unerlässlich:

  • TO_DATE( <Wert>, [, <Format>] )
  • TO_TIME( <Wert>, [, <Format>] )
  • TO_SECONDDATE( <Wert>, [, <Format>] )
  • TO_TIMESTAMP( <Wert>, [, <Format>] )
(C) Brandeis Consulting.

Rechnen mit der Zeit

Berechnungen erfolgen immer mit SQL-Funktionen
Einzelne Komponenten der Zeit werden nicht wie in ABAP zum Rechnen verwendet!

(C) Brandeis Consulting.

Ergebnistyp der SQL-Funktionen für Zeit

Der Ergebnistyp entspricht der Eingabe. Z.B ADD_DAYS() liefert, je nach Eingabeparameter, entweder ein Datum oder einen Zeitstempel:

SELECT ADD_DAYS(DATE'2018-07-26', 10) AS datum,
       ADD_DAYS(TIMESTAMP'2018-07-26 10:58:00', 10) AS Zeitstempel
       FROM DUMMY;

Wo ein Datum in einer Funktion erwartet wird, kann auch ein Zeitstempel übergeben werden. Für Zeitangaben gilt das Gleiche.

(C) Brandeis Consulting.

Zeitfunktionen – Addition

Funktion Bemerkung
ADD_SECONDS( <Zeit>, <Sekunden>)
`ADD_DAYS( , )
ADD_MONTHS(<Datum>, <Monate>) Rundet ab, falls notwendig: 31.1.2018 plus einen Monat ergibt den 28.2.2018
ADD_MONTHS_LAST(<Datum>, <Monate>) Ab HANA 2.0. – Berücksichtigt den letzten eines Monats: 28.2.2018 plus ein Monat ergibt den 31.3.2018
ADD_YEARS(<Datum>, <Jahre>)
ADD_WORKDAYS(<KalenderID>, <Datum>, <Tage>) Berechnung mit Werkskalender aus TFACS abelle
(C) Brandeis Consulting.

Zeitfunktionen – Differenzen

Funktion Anmerkung
NANO100_BETWEEN(<ZP1>, <ZP2>) Nur für Datumswerte erlaubt. Liefert ein Ergebnis in 0,1 Micro Sekunden
SECONDS_BETWEEN(<ZP1>, <ZP2>)
DAYS_BETWEEN(<ZP1>, <ZP2>)
MONTHS_BETWEEN(<ZP1>, <ZP2>)
YEARS_BETWEEN(<ZP1>, <ZP2>)
WORKDAYS_BETWEEN(<KalenderID>, <ZP1>, <ZP2>) Siehe ADD_WORKDAYS()
(C) Brandeis Consulting.

Zeitfunktionen – Sonstige

  • NEXT_DAY( <Datum>)
  • LAST_DAY(<Datum>) – letzter Tag des Monats
  • UTCTOLOCAL(<Zeitstempel>,<Zeitzone>[, <Herkunft>])
  • LOCALTOUTC(<Zeitstempel>,<Zeitzone>[, <Herkunft>])
  • DAYOFYEAR(<Datum>) - 1.Januar entspricht der 1
  • DAYNAME (<Datum>) – in englischer Sprache
  • MONTHNAME (<Datum>) – in englischer Sprache
  • QUARTER (<Datum>[, <Erster Monat>]) – abweichendes Geschäftsjahr möglich
  • WEEKDAY (<Datum>) – Montag = 0, Sonntag = 6
  • WEEK (<Datum>) – 1.Januar ist in KW1. So ist es in den USA üblich.
  • ISOWEEK (<Datum>) – Nach ISO: KW1 enthält den 1. Donnerstag des Jahres, üblich in DE
(C) Brandeis Consulting.

Übungsaufgabe

Jede offene Aufgabe (TASKS) soll in der Woche vor der Fälligkeit (DUE_DATE) noch mal im Team-Meeting, dass immer Freitags stattfindet, vom ganzen Team besprochen werden. Erstellen Sie eine Liste aller offenen Aufgaben mit dem Datum des zugehörigen Team Meetings.

(C) Brandeis Consulting.

Zeitfunktionen – Komponenten

YEAR(<Datum>)
MONTH(<Datum>)
DAYOFMONTH(<Datum>)
HOUR(<Zeit>)
MINUTE(<Zeit>)
SECOND(<Zeit>)
Das Ergebnis der Funktionen ist immer eine Ganzzahl (INT)

Alternativ:
EXTRACT (YEAR FROM <Datum>)

(C) Brandeis Consulting.

Zeittabellen

Die Standardtabelle _SYS_BI.M_TIME_DIMENSION

Diese Tabelle enthält generierte Zeitscheiben. Die Generierung erfolgt mit dem Assistenten in der HANA Modeller Perspektive:

Eigene Zeittabellen

Falls die Standardtabelle nicht ausreicht, kann man sich eine eigene Z-Tabelle anlegen für die Zeitdimension, und dort per ABAP Report (oder SQLScript) die benötigten Daten reingenerieren.

(C) Brandeis Consulting.