PostgreSQL

Thomas Baedorf tom at buchforst.ping.de
So Jul 6 16:16:42 CEST 2008


On Sun, Jul 06, 2008 at 10:24:59AM +0200, Michael Welle wrote:
> Hallo,
> 
> Thomas Baedorf <tom at buchforst.ping.de> writes:
> 
> > hallo Datenbankfans,
> > ich benutze eine Tabelle in der ich eintrage
> > wieviel km ich mit dem Fahrrad fahre und die
> > Zeit, die ich benötige.
> > DBMS ist übrigens PostgreSQL 8.1.11.
> > Die Spalte km hat den Datentyp numeric(4,1) und
> > die zeit::interval.
> > Ein auf den ersten Blick bescheidener Wunsch wäre
> > die Durchschnittsgeschwindigkeit zu ermitteln.
> > 'select km/zeit from fahrrad' führt jedoch zu
> > Fehlermeldung, wobei ein sinnloses 'select km*zeit from
> > fahrrad' funktioniert; allerdings ist die Ausgabe im Datentyp interval.
> > Damit das Ganze überhaupt funktioniert,muss die zeit vom Datentyp interval
> > in eine Dezimalzahl umgewandelt werden. 
> > Und genau das geht eben 
> > nicht.
> > 'select zeit::real from fahrrad' -> ERROR: cannot cast type 
> > interval to real !
> > Gibt es eine Funktion die ein interval also z.B. 2 Std 30 min
> > in den Wert 2.5 verwandelt?
> muesste man mal in die Doku schauen ;). Als Ansatz koennte man auch mal
> hiervon ausgehen:
> 
> create function interval2hours ( _interval interval ) 
> returns float as $$
> declare hours float := 0;
> 
> begin
> select (extract( hour from _interval)+(extract( minute from _interval)/60)) into hours;
> return hours;
> end 
> 
> $$
> language plpgsql;
hallo Michael,
ich habe den Quellcode dem Backend übergeben und hat
fehlerfrei kompiliert. Ich habe nur den Funktionsnamen
in zeitinterval geändert ; Durfte ich doch - war
doch sicher GPL ;-)
Wenn ich einen englischen Begriff verwende, kann ich hinterher
kaum noch unterscheiden ob die Funktion von mir (in dem Fall von dir)
war oder eine Systemfunktion die von PostgreSQL mitgeliefert wurde.
> 
> select km / interval2hours(zeit) from fahrrad;
select km / zeitinterval(zeit) from fahrrad;
liefert auch fast den gleichen Wert wie der Ansatz von Guido
SELECT 3600 * km / EXTRACT(epoch FROM zeit) as avg_speed FROM fahrrad;

liegt wohl daran dass deine PL/pgSQL Funktion die Sekunden abschneidet,
die ich natürlich ganz penibel vom Fahrradcomputer in die Datenbank
eingegeben habe.
 
Vielen Dank 

> 
> VG
> hmw
> 
> -- 
> biff4emacsen - A biff-like tool for (X)Emacs
> http://www.c0t0d0s0.de/biff4emacsen/biff4emacsen.html

-- 
______
Thomas
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : <http://lists.uni-koeln.de/pipermail/linux-users/attachments/20080706/a9f7da7b/attachment.asc>


Mehr Informationen über die Mailingliste Linux-Users