Ich versuche, ein True/False-Flag zu erstellen, das wahr ist, wenn zwei Datumsparametersätze einige überlappende Zeit oder Tage enthalten. Mein Verständnis ist, dass Postgres hat bereits eine Funktion für das genannte ‚ÜBERLAPPT‘, wie in dieser Dokumentation von 8,4 gesehen:Overlaps-Funktion in Redshift
[https://www.postgresql.org/docs/8.4/static/functions-datetime.html][1]
Wenn ich versuche, Überlappungen in Rotverschiebung zu verwenden, wie es scheint die Funktion funktioniert, finden Sie Beispiel unten:
SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS
(DATE '2001-10-30', DATE '2002-10-30');
Allerdings, wenn ich versuche, es zu verwenden, um eine Spalte zu füllen, erzeugt er einen Fehler, siehe Beispiel unten, wo das Ergebnis immer wahr sein sollte, weil seine aa Zeit zu sich selbst zu vergleichen. In diesem Beispiel verwende ich Timestamp mit Zeitzone, aber ich habe es auch ohne Zeitzone versucht, und als nur Datum, die alle mit dem gleichen Fehler fehlschlagen.
CREATE TABLE date_table (
variable VARCHAR,
date_start TIMESTAMP WITH TIME ZONE,
date_end TIMESTAMP WITH TIME ZONE
)
;
INSERT INTO date_table VALUES ('max_date', TO_TIMESTAMP('2017/04/05
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2017/04/09 00:00:00',
'YYYY/MM/DD HH24:MI:SS'))
;
INSERT INTO date_table VALUES ('min_date', TO_TIMESTAMP('2016/04/06
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2016/04/15 00:00:00',
'YYYY/MM/DD HH24:MI:SS'))
;
INSERT INTO date_table VALUES ('min_date', TO_TIMESTAMP('2015/04/01
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2015/04/14 00:00:00',
'YYYY/MM/DD HH24:MI:SS'))
;
SELECT dt.*, (date_start, date_end) OVERLAPS (date_start, date_end) AS
overlap_test
FROM date_table dt
Der Fehler, den ich bekommen ist unten aufgeführt:
An error occurred when executing the SQL command:
SELECT dt.*, (date_start, date_end) OVERLAPS (date_start, date_end) AS overlap_test
FROM date_table dt
[Amazon](500310) Invalid operation: Specified types or functions (one per INFO message) not supported on Redshift tables.;
Warnings:
Function ""overlaps"(timestamp without time zone,timestamp without time zone,timestamp without time zone,timestamp without time zone)" not supported.
Execution time: 0.07s
Statement 1 of 1 finished
1 statement failed.
Redshift basiert auf Postgres 8.0, daher ist das Lesen eines Handbuchs für eine spätere Version nicht sinnvoll. Eigentlich macht das Lesen des Postgres-Handbuchs keinen Sinn, Sie sollten das Redshift-Handbuch konsultieren: http://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html ("Überschneidungen" scheinen nicht dokumentiert zu sein) überhaupt dort) –
In Bezug auf den Fehler: Ihr erstes Beispiel verwendet 'DATE' Werte. In Ihrem zweiten Beispiel verwenden Sie 'TIMESTAMP'-Werte. Wie die Fehlermeldung sagt, wird das scheinbar nicht unterstützt. –
Hab mein Fehler, hier wäre der Link von 8.0 wo es gelistet ist. https://www.postgresql.org/docs/8.0/static/functions-datetime.html Es scheint eindeutig in Redshift verwendbar, da das erste Beispiel ein Ergebnis zurückgibt und "OVERLAPS" in der reservierten Liste der Rotverschiebung angezeigt wird: http: //docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html Es ist nur neugierig, dass Rotverschiebung scheint keine andere Dokumentation der Funktion zu haben. –