PostgreSQL - DATE / TIME Funktionen und Operatoren
Wir hatten die Datentypen Datum / Uhrzeit im Kapitel Datentypen besprochen . Lassen Sie uns nun die Datums- / Zeitoperatoren und Funktionen sehen.
In der folgenden Tabelle sind die Verhaltensweisen der grundlegenden arithmetischen Operatoren aufgeführt.
Operator | Beispiel | Ergebnis |
---|---|---|
+ | Datum '28.09.2001' + Ganzzahl '7' | Datum '2001-10-05' |
+ | Datum '2001-09-28' + Intervall '1 Stunde' | Zeitstempel '2001-09-28 01:00:00' |
+ | Datum '28.09.2001' + Uhrzeit '03: 00 ' | Zeitstempel '2001-09-28 03:00:00' |
+ | Intervall '1 Tag' + Intervall '1 Stunde' | Intervall '1 Tag 01:00:00' |
+ | Zeitstempel '2001-09-28 01:00' + Intervall '23 Stunden ' | Zeitstempel '2001-09-29 00:00:00' |
+ | Zeit '01: 00 '+ Intervall' 3 Stunden ' | Zeit '04: 00: 00 ' |
- - | - Intervall '23 Stunden ' | Intervall '-23: 00: 00' |
- - | Datum '2001-10-01' - Datum '2001-09-28' | Ganzzahl '3' (Tage) |
- - | Datum '2001-10-01' - Ganzzahl '7' | Datum '2001-09-24' |
- - | Datum '2001-09-28' - Intervall '1 Stunde' | Zeitstempel '2001-09-27 23:00:00' |
- - | Zeit '05: 00 '- Zeit '03: 00' | Intervall '02: 00: 00 ' |
- - | Zeit '05: 00 '- Intervall' 2 Stunden ' | Zeit '03: 00: 00 ' |
- - | Zeitstempel '2001-09-28 23:00' - Intervall '23 Stunden ' | Zeitstempel '2001-09-28 00:00:00' |
- - | Intervall '1 Tag' - Intervall '1 Stunde' | Intervall '1 Tag -01: 00: 00' |
- - | Zeitstempel '2001-09-29 03:00' - Zeitstempel '2001-09-27 12:00' | Intervall '1 Tag 15:00:00' |
* * | 900 * Intervall '1 Sekunde' | Intervall '00: 15: 00 ' |
* * | 21 * Intervall '1 Tag' | Intervall '21 Tage ' |
* * | doppelte Genauigkeit '3,5' * Intervall '1 Stunde' | Intervall '03: 30: 00 ' |
/. | Intervall '1 Stunde' / doppelte Genauigkeit '1,5' | Intervall '00: 40: 00 ' |
Im Folgenden finden Sie eine Liste aller wichtigen verfügbaren Funktionen für Datum und Uhrzeit.
S. Nr. | Bedienungsanleitung |
---|---|
1 | ALTER() Argumente subtrahieren |
2 | AKTUELLES DATUM / ZEIT () Aktuelles Datum und Uhrzeit |
3 | DATE_PART () Unterfeld abrufen (entspricht Extrahieren) |
4 | EXTRAKT() Unterfeld abrufen |
5 | ISFINITE () Test auf endliches Datum, Uhrzeit und Intervall (nicht +/- unendlich) |
6 | RECHTFERTIGEN Intervall anpassen |
AGE (Zeitstempel, Zeitstempel), AGE (Zeitstempel)
S. Nr. | Bedienungsanleitung |
---|---|
1 | AGE(timestamp, timestamp) Beim Aufrufen mit der TIMESTAMP-Form des zweiten Arguments subtrahiert AGE () Argumente und erzeugt ein "symbolisches" Ergebnis, das Jahre und Monate verwendet und vom Typ INTERVAL ist. |
2 | AGE(timestamp) Wenn AGE () nur mit dem Argument TIMESTAMP als Argument aufgerufen wird, wird es vom aktuellen Datum (um Mitternacht) subtrahiert. |
Beispiel für die Funktion AGE (Zeitstempel, Zeitstempel) ist -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
Die oben angegebene PostgreSQL-Anweisung führt zu folgendem Ergebnis:
age
-------------------------
43 years 9 mons 27 days
Beispiel für die Funktion AGE (Zeitstempel) ist -
testdb=# select age(timestamp '1957-06-13');
Die oben angegebene PostgreSQL-Anweisung führt zu folgendem Ergebnis:
age
--------------------------
55 years 10 mons 22 days
AKTUELLES DATUM / ZEIT ()
PostgreSQL bietet eine Reihe von Funktionen, die Werte für das aktuelle Datum und die aktuelle Uhrzeit zurückgeben. Es folgen einige Funktionen -
S. Nr. | Bedienungsanleitung |
---|---|
1 | CURRENT_DATE Liefert das aktuelle Datum. |
2 | CURRENT_TIME Liefert Werte mit Zeitzone. |
3 | CURRENT_TIMESTAMP Liefert Werte mit Zeitzone. |
4 | CURRENT_TIME(precision) Optional wird ein Präzisionsparameter verwendet, der bewirkt, dass das Ergebnis im Sekundenfeld auf so viele Bruchstellen gerundet wird. |
5 | CURRENT_TIMESTAMP(precision) Optional wird ein Präzisionsparameter verwendet, der bewirkt, dass das Ergebnis im Sekundenfeld auf so viele Bruchstellen gerundet wird. |
6 | LOCALTIME Liefert Werte ohne Zeitzone. |
7 | LOCALTIMESTAMP Liefert Werte ohne Zeitzone. |
8 | LOCALTIME(precision) Optional wird ein Präzisionsparameter verwendet, der bewirkt, dass das Ergebnis im Sekundenfeld auf so viele Bruchstellen gerundet wird. |
9 | LOCALTIMESTAMP(precision) Optional wird ein Präzisionsparameter verwendet, der bewirkt, dass das Ergebnis im Sekundenfeld auf so viele Bruchstellen gerundet wird. |
Beispiele mit den Funktionen aus der obigen Tabelle -
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL bietet auch Funktionen, die die Startzeit der aktuellen Anweisung sowie die tatsächliche aktuelle Zeit zum Zeitpunkt des Aufrufs der Funktion zurückgeben. Diese Funktionen sind -
S. Nr. | Bedienungsanleitung |
---|---|
1 | transaction_timestamp() Es entspricht CURRENT_TIMESTAMP, wird jedoch so benannt, dass es deutlich widerspiegelt, was es zurückgibt. |
2 | statement_timestamp() Es gibt die Startzeit der aktuellen Anweisung zurück. |
3 | clock_timestamp() Es gibt die aktuelle Uhrzeit zurück und daher ändert sich sein Wert auch innerhalb eines einzelnen SQL-Befehls. |
4 | timeofday() Es gibt die aktuelle Uhrzeit zurück, jedoch als formatierte Textzeichenfolge und nicht als Zeitstempel mit Zeitzonenwert. |
5 | now() Es ist ein traditionelles PostgreSQL-Äquivalent zu transaction_timestamp (). |
DATE_PART (Text, Zeitstempel), DATE_PART (Text, Intervall), DATE_TRUNC (Text, Zeitstempel)
S. Nr. | Bedienungsanleitung |
---|---|
1 | DATE_PART('field', source) Diese Funktionen erhalten die Unterfelder. Das Feld Parameter muss ein String - Wert sein, kein Name. Die gültigen Feldnamen sind: Jahrhundert, Tag, Jahrzehnt, Dow, Doy, Epoche, Stunde, Isodow, Isoyear, Mikrosekunden, Millennium, Millisekunden, Minute, Monat, Viertel, Sekunde, Zeitzone, Zeitzone_Stunde, Zeitzone_Minute, Woche, Jahr. |
2 | DATE_TRUNC('field', source) Diese Funktion ähnelt konzeptionell der Trunk- Funktion für Zahlen. Quelle ist ein Wertausdruck vom Typ Zeitstempel oder Intervall. Feld wählt aus, mit welcher Genauigkeit der Eingabewert abgeschnitten werden soll. Der Rückgabewert ist vom Typ Zeitstempel oder Intervall . Die gültigen Werte für das Feld sind: Mikrosekunden, Millisekunden, Sekunde, Minute, Stunde, Tag, Woche, Monat, Quartal, Jahr, Jahrzehnt, Jahrhundert, Jahrtausend |
Das Folgende sind Beispiele für DATE_PART-Funktionen ( 'Feld' , Quelle) -
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
Das Folgende sind Beispiele für DATE_TRUNC-Funktionen ( 'Feld' , Quelle) -
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (Feld vom Zeitstempel), EXTRACT (Feld vom Intervall)
Das EXTRACT(field FROM source)Die Funktion ruft Unterfelder wie Jahr oder Stunde von Datums- / Zeitwerten ab. Die Quelle muss ein Wertausdruck vom Typ Zeitstempel, Zeit oder Intervall sein . Das Feld ist eine Kennung oder Zeichenfolge, die auswählt, welches Feld aus dem Quellwert extrahiert werden soll. Die EXTRACT-Funktion gibt Werte vom Typ doppelte Genauigkeit zurück .
Die folgenden sind gültige Feldnamen (ähnlich den DATE_PART-Funktionsfeldnamen): Jahrhundert, Tag, Jahrzehnt, Dow, Doy, Epoche, Stunde, Isodow, Isoyear, Mikrosekunden, Millennium, Millisekunden, Minute, Monat, Viertel, Sekunde, Zeitzone, Zeitzone_Stunde , timezone_minute, Woche, Jahr.
Das Folgende sind Beispiele für EXTRACT-Funktionen ( 'Feld' , Quelle) -
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (Datum), ISFINITE (Zeitstempel), ISFINITE (Intervall)
S. Nr. | Bedienungsanleitung |
---|---|
1 | ISFINITE(date) Tests für endliches Datum. |
2 | ISFINITE(timestamp) Testet auf endlichen Zeitstempel. |
3 | ISFINITE(interval) Tests für endliche Intervalle. |
Das Folgende sind die Beispiele der ISFINITE () -Funktionen -
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (Intervall), JUSTIFY_HOURS (Intervall), JUSTIFY_INTERVAL (Intervall)
S. Nr. | Bedienungsanleitung |
---|---|
1 | JUSTIFY_DAYS(interval) Passt das Intervall so an, dass 30-Tage-Zeiträume als Monate dargestellt werden. Gib die ... wiederinterval Art |
2 | JUSTIFY_HOURS(interval) Passt das Intervall so an, dass 24-Stunden-Zeiträume als Tage dargestellt werden. Gib die ... wiederinterval Art |
3 | JUSTIFY_INTERVAL(interval) Passt das Intervall mit JUSTIFY_DAYS und JUSTIFY_HOURS mit zusätzlichen Vorzeichenanpassungen an. Gib die ... wiederinterval Art |
Das Folgende sind die Beispiele für die ISFINITE () -Funktionen -
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)