zukünftige Mietungen eintragen (Range)

Kampfgummibaerlie

Datenbank-Guru
Beiträge
731
Ich glaube, ich hänge schon seit 08:00 heute Morgen an dem Problem, und ich würde gerne für die Upper(Range) den Default-Wert abrufen, wenn ich nur den Lower(Range)-Wert angebe.

Habe vieles probiert, mit casten, interval, und was weiß ich was allem......

Also, ich versuche es über das erstellen einer Funktion:
Code:
create function z_mietbeginn (x INTEGER, y timestamp) returns void as $$ insert into vermietungen (maschinen_ID, mietzeit) values (x, (y, y+'6 hour'::interval)::tsrange); $$ language sql;

Error ist folgender:
ERROR: cannot cast type record to tsrange LINE 1: ...ID, mietzeit) values (x, (y, y+'6 hour'::interval)::tsrange)... ^ ********** Error ********** ERROR: cannot cast type record to tsrange SQL-Status: 42846 Zeichen: 160

Ich bin schon über viele Errors gestolpert, jedoch ist es mir noch nicht gelungen.
Der Default-Wert ist now() und now()+'6 hour'::intervall

Kam auch schon zu Errorn, die aussahen wie:
Kann nicht Wert der eigenen Spalte für Default-Wert verwenden, oder sowas...

Würde mich herzlich bei euch bedanken :)

Alternativ könnte ich auch enfach nur die Function mit einem Y-Wert, welcher eine tsrange wäre füllen, aber es ist ja in gewissem Maße nicht bekannt, wielange die Leute bei einer Maschine bleiben.
 
Werbung:
weil du es bist ...

Code:
test=# create table foo(id int, tsr tsrange);
CREATE TABLE
test=# create or replace function z_mietbeginn (x INTEGER, y timestamp) returns void as $$insert into foo(id,tsr) values (x, tsrange(y,y+'6 hour'));$$language sql;
CREATE FUNCTION
test=# select z_mietbeginn(1, now()::timestamp);
 z_mietbeginn
--------------
(1 row)

test=# select * from foo;
 id |  tsr   
----+-------------------------------------------------------------
  1 | ["2017-06-22 17:54:53.586632","2017-06-22 23:54:53.586632")
(1 row)

test=#
 
Zurück
Oben