SQL Translator-Unterstützung für Datums-, Zeit- und Zeitstempelfelder

In diesem Abschnitt:

Referenz:

Es wurden mehrere neue Datentypen für den SQL Translator definiert, um Datum-Zeit-Felder im WHERE-Prädikat oder der Feldliste einer SELECT-Anweisung zu unterstützen.

Es können zusätzlich Zeit- oder Zeitstempelspalten in relationalen Datenquellen oder FOCUS-Datenquellen definiert werden und der Translator kann auf sie zugreifen. Es können Werte mit INSERT- und UPDATE-Anweisungen eingegeben werden und in SELECT-Anweisungen angezeigt werden.

Zeit- oder Zeitstempel-Datenelemente (Spalten oder Literale) können in Bedingungen verglichen werden. Zeitwerte oder Zeitstempelwerte können addiert werden oder voneinander subtrahiert werden, wobei das Ergebnis die Differenz in Sekunden ist. Formeln wie T + 2 HOURS oder TS + 5 YEARS sind erlaubt. Diese Formeln werden in Abfragen für die Datum-Zeit-Funktionen übersetzt, wie es beschrieben wird im Handbuch Funktionen verwenden .

Alle Datumsformate für tatsächliche und virtuelle Felder in der Masterdatei werden in das Format YYYYMMDD umgewandelt. Wenn Sie ein Format angeben, in dem eine Komponente fehlt, gibt der SQL Translator einen Defaultwert für die fehlende Komponente an. Verwenden Sie ein virtuelles Feld mit einem alphanumerischen Format, um einen Teil eines Datums wie beispielsweise den Monat anzugeben.


Nach oben

x
Referenz: SQL Translator-Unterstützung für Datums-, Zeit- und Zeitstempelfelder

Im folgenden Diagramm steht fff für die Sekunde bis zu drei Dezimalstellen (Millisekunden) und ffffff für die Sekunde bis zu sechs Dezimalstellen (Mikrosekunden).

Die folgenden Formate sind als Eingabe in den Translator erlaubt:

Format

USAGE-Attribut in der Masterdatei

Datumskomponenten

Datum

YYMD
YYYY-MM-DD

Stunde

HH
HH

Stunde bis Minute

HHI
HH.MM

Stunde bis Sekunde

HHIS
HH.MM.SS

Stunde bis Millisekunde

HHISs
HH.MM.SS.fff

Stunde bis Mikrosekunde

HHISsm
HH.MM.SS.ffffff

Jahr bis Stunde

HYYMDH
YYYY-MM-DD HH

Jahr bis Minute

HYYMDI
YYYY-MM-DD HH.MM

Jahr bis Sekunde

HYYMDS
YYYY-MM-DD HH.MM.SS

Jahr bis Millisekunde

HYYMDs
YYYY-MM-DD HH.MM.SS.fff

Jahr bis Mikrosekunde

HYYMDm
YYYY-MM-DD
HH.MM.SS.ffffff

Hinweis:



x
Datum-Zeit-Komponenten mit dem SQL Translator extrahieren

Vorgehensweise:

Der SQL Translator unterstützt mehrere Funktionen, die Komponenten aus Datum-Zeit-Werten zurückgeben. Verwenden Sie die EXTRACT-Anweisung, um Komponenten zu extrahieren.

Verwenden Sie die Funktion TRIM, um vorangestellte oder/oder nachgestellte Muster aus Datum-, Zeit- und Zeitstempelwerten zu entfernen. Im Handbuch Funktionen verwenden .



x
Syntax: Datum-, Zeit- und Zeitstempelfunktionen verwenden, die vom SQL Translator akzeptiert werden

Die folgenden Funktionen geben Datum-Zeit-Komponenten als ganzzahlige Werte zurück. Nehmen wir an, dass x ein Datum-Zeitwert ist:

Funktion

Rückgabewert

YEAR(x)

Jahr

MONTH(x)

Monatszahl

DAY(x)

Tageszahl

HOUR(x)

Stunde

MINUTE(x)

Minute

SECOND(x)

Sekunde

MILLISECOND(x)

Millisekunde

MICROSECOND(x)

Mikrosekunde



Beispiel: Datum-, Zeit- und Zeitstempel-Funktionen des SQL Translator verwenden

Verwenden der Zeitstempelspalte TS, deren Wert '1999-11-23 07:32:16.123456' ist:

YEAR(TS) = 1999
MONTH(TS) = 11
DAY(TS) = 23
HOUR(TS) = 7
MINUTE(TS) = 32
SECOND(TS) = 16
MILLISECOND(TS) = 123
MICROSECOND(TS) = 123456


Beispiel: Datum-, Zeit- und Zeitstempel-Funktionen des SQL Translator in einer SELECT-Anweisung verwenden

Nehmen wir an, dass eine FOCUS-Datenquelle namens VIDEOTR2 ein Datum-Zeit-Feld namens TRANSDATE enthält.

SQL
SELECT TRANSDATE,
YEAR(TRANSDATE), MONTH(TRANSDATE),
MINUTE(TRANSDATE)
FROM VIDEOTR2;
FILE VIDSQL 
END

Der SQL Translator erzeugt die folgenden virtuellen Felder für Funktionen, gefolgt von einer TABLE-Anfrage, um die Ausgabe anzuzeigen:

SET COUNTWIDTH=ON                                                        
-SET SQLERRNUM = 0;                                                      
DEFINE FILE                                                              
VIDEOTR2 TEMP                                                            
SQLDEF01/I4 MISSING ON NEEDS ALL = HPART(TRANSDATE,'YEAR','I4');         
SQLDEF02/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MONTH','I2');        
SQLDEF03/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MINUTE','I2');       
END                                                                      
TABLEF FILE VIDEOTR2                                                     
PRINT TRANSDATE SQLDEF01 AS 'SQLDEF01' SQLDEF02 AS 'SQLDEF02' SQLDEF03 AS
  'SQLDEF03'                                                             
ON TABLE SET CARTESIAN ON                                                
ON TABLE SET ASNAMES ON                                                  
ON TABLE SET HOLDLIST PRINTONLY 
END                                         

Die Ausgabe ist:

TRANSDATE         SQLDEF02  SQLDEF04  SQLDEF05
1999/06/20 04:14      1999         6        14
1991/06/27 02:45      1991         6        45
1996/06/21 01:16      1996         6        16
1991/06/21 07:11      1991         6        11
1991/06/20 05:15      1991         6        15
1999/06/26 12:34      1999         6        34
1919/06/26 05:45      1919         6        45
1991/06/21 01:10      1991         6        10
1991/06/19 07:18      1991         6        18
1991/06/19 04:11      1991         6        11
1998/10/03 02:41      1998        10        41
1991/06/25 01:19      1991         6        19
1986/02/05 03:30      1986         2        30
1991/06/24 04:43      1991         6        43
1991/06/24 02:08      1991         6         8
1999/10/06 02:51      1999        10        51
1991/06/25 01:17      1991         6        17


x
Syntax: Verwenden Sie die EXTRACT-Funktion des SQL Translator, um Datum-Zeit-Komponenten zu extrahieren

Verwenden Sie die folgende ANSI-Standardfunktion, um Datum-Zeit-Komponenten als ganzzahlige Werte zu extrahieren:

EXTRACT(component FROM value)

Hierbei gilt:

Komponente

Ist eine der folgenden: YEAR, MONTH, QUARTER, DAY, WEEKDAY, HOUR, MINUTE, SECOND, MILLISECOND oder MICROSECOND.

Wert

Ist ein Datum-Zeit-, DATE-, TIME- oder TIMESTAMP-Feld, -Konstante oder -Formel.

Das Folgende ist z. B. äquivalent:

EXTRACT(YEAR FROM TS)
YEAR(TS)


Beispiel: Die EXTRACT-Funktion verwenden
SELECT D. EXTRACT(YEAR FROM D), EXTRACT(MONTH FROM D),
EXTRACT(DAY FROM D) FROM T

Diese Anfrage erzeugt Zeilen, die der Folgenden ähneln:

1999-01-01     1999      1       1
2000-03-03     2000      3       3

WebFOCUS