FOR PORTION OF - Umsetzung bei ORACLE

Espina

Benutzer
Beiträge
5
Hallo zusammen,
ich betrachte im Moment die Möglichkeiten zur Speicherung temporaler Daten bei Oracle.
Ich habe eine Tabelle mit Valid Time und möchte gerne ein Update machen. Folgenden Befehl habe ich bei DB2 ausprobiert und würde ihn gerne bei Oracle ebenfalls ausführen:

UPDATE table1
FOR PORTION OF business_time FROM '2016-08-01' TO '2016-10-10'
SET coverage = 10000
WHERE id = '1234'

Gibt es eine Möglichkeit bei Oracle einen Teil einer Zeitperiode wie durch den Zusatz FOR PORTION OF anzugeben? Ich habe bisher leider keine gute Lösung finden können.

Danke für die Hilfe!
 
Werbung:
Hallo akretschmer,
das hatte ich mir auch gedacht, es sollen dann aber nach der Definition für FOR PORTION OF auch Datensätze drin sein, die nur zum Teil in dem Bereich liegen.
Mit between ging es schon mal nicht und mit < und > schließe ich doch aus, dass Datensätze, die z.B. früher beginnen aber das Datum beinhalten mit drin sind, oder habe ich da noch einen Denkfehler?
Danke für die Hilfe!
Espina
 
Auch das sollte via Where-Condition doch gegen, denke ich. Demo in PG unter Verwendung von RANGE-Typen:

Code:
test=*# select * from espina;
 id |  time_range   
----+-----------------------------------------------
  1 | ["2016-04-01 00:00:00","2016-06-01 00:00:00")
  2 | ["2016-05-01 00:00:00","2016-07-01 00:00:00")
  3 | ["2016-06-01 00:00:00","2016-08-01 00:00:00")
  4 | ["2016-07-01 00:00:00","2016-09-01 00:00:00")
(4 rows)

test=*# select * from espina where time_range && '(2016-05-15 00:00:00,2016-06-15 00:00:00]';
 id |  time_range   
----+-----------------------------------------------
  1 | ["2016-04-01 00:00:00","2016-06-01 00:00:00")
  2 | ["2016-05-01 00:00:00","2016-07-01 00:00:00")
  3 | ["2016-06-01 00:00:00","2016-08-01 00:00:00")
(3 rows)

test=*# select * from espina where time_range && '(2016-05-15 00:00:00,2016-05-25 00:00:00]';
 id |  time_range   
----+-----------------------------------------------
  1 | ["2016-04-01 00:00:00","2016-06-01 00:00:00")
  2 | ["2016-05-01 00:00:00","2016-07-01 00:00:00")
(2 rows)


Der && - Operator ist hier der OVERLAP - Operator, das ist ja das, was Du suchst, oder?
 
Hallo akretschmer,
vielen Dank für die schnelle Antwort und die Beispiele.
Leider funktioniert das bei meinem Beispiel so noch nicht. Mit der Valid-Time von SQL erstelle ich ja eine temporale Tabelle für den Anwendungszeitraum.
Ich gebe beim Anlegen der Tabelle an, welchen Start- und welchen Endwert das "Intervall" hat.

Beispiel:
CREATE TABLE table1
( table1_id CHAR(4) NOT NULL;
coverage INT NOT NULL,
bus_start DATE,
bus_end DATE,
PERIOD FOR Business_Time (bus_start, bus_end));

In der Tabelle selbst habe ich dann eine Spalte für bus_start und eine für bus_end.
Business_Time taucht so ja dann nicht auf.
Wenn ich versuche über die Business_Time abzufragen kriege ich die Fehlermeldung, dass der &&-Operator ein ungültiger relationaler Operator ist.

Viele Grüße und einen schönen Abend!
 
Werbung:
Ja, && ist ein spezieller Operator in PostgreSQL, der auf Überlappung prüft (bei Ranges oder auch bei geometrischen Objekten), kann schon gut sein, das selbst Oracle das so nicht kennt ...
 
Zurück
Oben