1 Range zu 2 Zeiten füllen

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Der Baer hat ein neues Problem an euch weiterzugeben:

Ich würde gerne >nur< die Hälfte einer Timerange füllen, (wenn möglich, die lower(timerange)), und als upper(timerange) einen fortlaufenden Wert einfüllen, ich weiß nicht, in wiefern das möglich ist, stelle ich mir aber ganz lässig vor ^^)

Geht das womöglich mit einem fortlaufenden Upper(Timerange)-Wert, wenn ich die Tabelle ein wenig umprogrammiere, und der wiederum als Default-Wert ein now() gebe, aber ich bin mir nicht sicher, ob das now() ohne Trigger (der womöglich alle 30 Sekunden einmal "zündet", und die Upper(Timerange) durch den aktuellen now() ersetzt) möglich ist.

Anbei: Einen wunderschönen guten Morgen am Sonntag ;)
 
Zuletzt bearbeitet:
Werbung:
Geht das womöglich mit einem fortlaufenden Upper(Timerange)-Wert, wenn ich die Tabelle ein wenig umprogrammiere, und der wiederum als Default-Wert ein now() gebe, aber ich bin mir nicht sicher, ob das now() ohne Trigger (der womöglich alle 30 Sekunden einmal "zündet", und die Upper(Timerange) durch den aktuellen now() ersetzt) möglich ist.

Ich habe es jetzt in einer neu angelegten Datenbank schnell probiert, und ich glaube, es ist nur möglich, wenn ich mich wieder von der Timestamprange trenne, wobei ich mir aber denke, dass ich die Timestamprange brauche, um effektiv die Timestamprange_Diff zwischen "Miete_von" und "Miete_bis" erstellen kann.

Bin natürlich dankbar für jeden Tipp ;)

Anbei hier ein Anhang:
ja, eine "unnötige" Spalte mehr, aber ich kenne keinen anderen Weg ;)
 
Du kannst untere oder obere Grenze freilassen, dann gilt das bis unendlich in diese Richtung:

Code:
test=*# select '[10,)'::int4range @> 2;
 ?column?
----------
 f
(1 Zeile)

test=*# select '[10,)'::int4range @> 20;
 ?column?
----------
 t
(1 Zeile)

test=*#
 
Wollte gerade einen Post schreiben, wie ich es probiert hätte, aber wenn das geht, dann mache ich es so :D

habe es mit "~" probiert, aber nein ^^

Ich glaube, irgendwas mit open end hast du mir schonmal gesagt, deshalb war ich auch recht fasziniert von dem Range-Zeugs, aber konnte es nicht auf die Schnelle finden ^^

Ich glaube, ich bin bereits bekannt als Functions-Freak, also frage ich mal gleich nach, wie kann man sowas in eine einpacken? :/

Damit ich eine Function habe, wo ich einfach nur einfüllen muss "Kunde, Maschne", und er stempelt von selbst den current_timestamp rein, und als 2. Wert eben die Unendlichkeit, falls das so möglich ist :X

Antwort bitte erst pünktlich um 12:00 geben, falls es möglich ist, damit ich noch probieren kann :X
 
Zuletzt bearbeitet:
Um diesen Thread mit dem richtigen Code "abzuschließen":

Das hier wäre der (von mir) gewollte Code, und möchte mich natürlich bei Akretschmer bedanken, weil ich liebe es, denken zu müssen. Lesen von Berichten, oder Dokumentationen ist vl. weniger meins, aber ich lese gerne Dinge, wo ich direkt bei Problemen nachfragen könnte (Ich glaube, ich habe (mindestens) seit 10.04.2009 kein Buch mehr vollständig durchgelesen, sollte ich auch etwas aufwerten per einer Addition von 1-3 Büchern ;) )

Code:
update vermietungen set mietzeit = tsrange(lower(mietzeit), now()::timestamp without time zone) where vermietungs_id = x;

x ist mit dem entsprechend gewollten Wert ersetzbar ;)

Ich werde das Ganze einbauen (meine Vorstellung wäre eher so, dass man einen mobilen QR-Code-Scanner hat (Handy?), und nurnoch die entsprechende Maschine einscannen muss, und dann, je nachdem, ob schon jemand die Maschine mietet, das Ganze von Vorne anfängt, bzw. die bisherige Mietung abschließt)

Mir ist bewusst, ich habe noch einen weiten/langen Weg vor mir, aber ja, ich mag es perfekt und bin jung :)
 
Werbung:
Wie ihr mich kennt, geht nix ohne Function dazu, entsprechend auch hier der Code für die Function vom Ganzen:

Code:
CREATE OR REPLACE FUNCTION Beendigung3(x integer)
RETURNS tsrange AS $$
BEGIN update vermietungen set mietzeit = tsrange(lower(mietzeit), now()::timestamp without time zone) where vermietungs_id = x;
Return tsrange(lower(mietzeit), upper(mietzeit)) from vermietungen where vermietungs_id = x;
END;
$$  LANGUAGE plpgsql;

Es funktioniert, und bei meiner Variante, wo ich ein bisschen werkeln durfte, gibt sogar die TimeRange von Vermietungs_id (x) wieder, hatte ohne dem Return keine "Ausgabe" beim abrufen der Funktion ;)

Werde ich aber noch umbauen, auf die entsprechende Maschine. (Auch bei dem vorigen Code)

Ich habe so hart viele Ideen, wie ich das Cafe von Mutter zu einem Hit machen könnte xD

1.: Scan der Kunden-Nummer, mit evtl. Punktesammlung
das wärs xD
 
Zuletzt bearbeitet:
Zurück
Oben