Sum(Integer*Varchar) Problem mySQL

T

Thommsan

Gast
Hi ich habe folgendes Problem. ich muss die summe der bestandswerte (Einkaufspreis * Menege) von 5 artikeln ausrechnen. Da Einkaufspreis ein varchar ist und Menge ein Integer, lässt er mir bei der berechnung die nachkommastellen weg. Meine Abfrage sieht wie folgt aus:

SELECT SUM(a.Einkaufspreis*c.Anzahl_Einheiten)
AS Bestandswert
FROM Artikel a, Bestand c
WHERE a.ArtikelNR=c.ArtikelNR
;

Einkaufspreis varchar(8) null,
Anzahl_Einheiten int not null,

Wie gesagt, er berechnet mir das ohne Dezimalstellen... Was muss ich da noch hinzufügen/beachten...??

Vielen dank schon mal..
 
da das so vom prof vorgegeben ist...

die convert funktion hatten wir noch nicht, wie sind grad mal bei der zweiten vorlesung... gibts denn irgend eine andere möglichkeit?

muss ich preise mit punkt oder komma angeben?

wenn ich die preise mit punkt angebe und varchar beibehalte, erhalte ich als ergebnis:

24974,809999999998

wenn ich die preise mit punkt angebe und decimal übernehme, erhalte ich als ergebnis:

24974,81

und das letztere ergebnis ist das exakte. verstehe nicht wieso er bei varchar so viele nachkommastellen aufzeigt, obwohl ich bei preisen ja nur zwei habe...
 
Zuletzt bearbeitet:
Nein, da Einkaufspreis als Zeichenkette vorliegt und nicht als Zahl.
Die Zeichenkette muss erstmal als Zahl konvertiert werden.
Soviel, wie ich weiß, macht mySQL eine implizite Konvertierung. Die Zeichenkette wird als Integer konvertiert und da Integer ein ganzzahliger Wert ist, lässt er die Nachkommastellen weg.

Die richtige Vorgehensweise ist aber die, die Blitzmerker schon erwähnt hat.
 
Zuletzt bearbeitet:
ja ich weiß, mit decimal krieg ich es ja hin... problem ist halt, das varchar vorgegeben ist, und convert hatten wir noch nicht... gibts irgendeine möglichkeit noch? Wenn nicht, dann werde ich es mit decimal machen und mal schauen was der prof sagt... vielleicht hat er das mit varchar auch absichtlich eingebaut...
 
Thommsan schrieb:
verstehe nicht wieso er bei varchar so viele nachkommastellen aufzeigt, obwohl ich bei preisen ja nur zwei habe...

Das dürfte hiermit zu tun haben. Das ist auch der Grund, weshalb man beim Programmieren etwa für Geld nach Möglichkeit keine float/double-Typen verwenden sollte, sondern Festkomma- oder eigene Typen.
 
Thommsan schrieb:
die convert funktion hatten wir noch nicht, wie sind grad mal bei der zweiten vorlesung...

Es ist halt die Frage, ob ihr Convert jemals explizit durchnehmen werdet, da diese Funktion nicht zum SQL Standard gehört, sondern eine eigene Funktion von mySQL ist.
 
okay, dann vielen dank schon mal für die anregungen... ich werds jetzt mal bei decimal belassen, und sehen, was der prof dazu sagt... aber vielen dank für die vielen nützlichen antworten...
 
Zurück
Oben