Operandentypkollision TIME to INT

Typical

Neuer Benutzer
Beiträge
1
Hallo,

ich habe da mal eine kleine Frage zu einem Problem, mit dem ich nicht weiterkomme.
Ausgangslage: Ich habe die Spalten Leistung und Dauer vorgegeben. Leistung ist als float ('11.00', '9.92', etc.) und als Dauer als time (zB '04:00:00') deklariert.
Die Aufgabe verlangt nun von mir, die Werte beider Spalten jeweils miteinander zu multiplizieren, um einen Gesamtpreis zu ermitteln. Soweit, so gut.

Nun habe ich schon herausgefunden, dass ich einen time-wert nicht mit einem float-wert multiplizieren kann. (Operandentypkollision: time ist inkompatibel mit float)
Zumindest nicht ohne weiteres. Ich müsste also die Zeit in eine Zahl umwandeln, um damit rechnen zu können. 04:00:00 soll zu 4,00 werden. 02:30:00 zu 2,50 etc.

Nun meine Frage, nachdem meine Recherche bislang zu nichts geführt hat und die Lösung wahrscheinlich nicht so kompliziert ist, ich aber ein Brett vorm Kopf habe.
Kann mir da jemand Hilfe oder einen Denkanstoß geben?

Liebe Grüße und danke im Voraus!
 
Werbung:
hrm, funktioniert hier ohne Probleme:

Code:
postgres=# \d typical 
                Table "public.typical"
  Column  |   Type   | Collation | Nullable | Default 
----------+----------+-----------+----------+---------
 leistung | numeric  |           |          | 
 dauer    | interval |           |          | 

postgres=# select * from typical ;
 leistung |  dauer   
----------+----------
    11.00 | 04:00:00
(1 row)

postgres=# select *, leistung * dauer from typical ;
 leistung |  dauer   | ?column? 
----------+----------+----------
    11.00 | 04:00:00 | 44:00:00
(1 row)

postgres=#

ist aber kein M$SQL-Server, sondern PostgreSQL.
 
Werbung:
datediff(second,0,Dauer) * Leistung ist die eleganteste Variante die ich kenne. Der Rückweg ist dann etwas tricky, hier mal ein bisschen Beispiel-Code:
Code:
DECLARE    @Dauer AS TIME = '04:00:00'

SELECT    @Dauer,
        datediff(second,0,@Dauer),
        convert(TIME,dateadd(second,14400,0),114),
        convert(TIME,dateadd(second,datediff(second,0,@Dauer),0),114)
 
Zurück
Oben