Komma verruscht beim Convert

IchHH

Datenbank-Guru
Beiträge
284
Hallo,

ich habe in einer Spalte einen varcahr Wert der -57,6 lautet oder 351712,29 wenn ich diese Werte mittels

convert(money,myValue1) as Name

umwandel kommt -576,00 bzw. 35171229,00 raus. Das heißt also das er entweder das "," um ein oder zwei Stellen verschiebt. Aber Warum? Und wie unterbinde ich das?
 
Werbung:
Hallo, bin schon mal soweit das ich verstanden habe, dass wenn hinterm Komma 1 Zeigen steht er auch nur ein Komma nach rechts versetzt, bei zwei Zeichen hinterm Komma auch das komma um zwei Zeichen versetzt.
 
Kann eine Lösung wie folgt aussehen?

Code:
Select
Case When [Saldo_vom_02012018] like '%,_' then convert(money,[Saldo_vom_02012018])/10 Else convert(money,[Saldo_vom_02012018])/100 End as [Saldo vom 02.01.2018]
  FROM [DIAS_Import].[dbo].[IM_10025]
 
ich würde einfach im String das Komma gegen Punkt tauschen und danncasten:

Code:
test=*# select replace('-56,2',',','.')::numeric;
 replace
---------
  -56.2
(1 Zeile)

und in Zukunft gleich richtige Datentypen verwenden...
 
Das mit dem Komma durch Punkt hatte ich vorher und gibt scheinbar probleme beim Rechnen zweiter Beträge (siehe anderen Beitrag heute), weshalb ich es nun bei Komma belassen wollte und schauen wollte ob die Berechnung dann klappt. Oder wie erklärst du dir das, dass meine Formel im anderen Beitrag nicht mehr funktioniert? Da versucht er nämlich money mit Varchar bzw. decimal zu addieren.
 
Um eben zu verhindern das 5€+"gutes Wetter" gerechnet wird, versuche ich den Weg über die Wenn Dann Formel einen Money betrag zu machen, dass klappt soweit auch ganz gut. Rechnen tut er es dennoch nicht. Wobei ich nun festgestellt habe dass wenn er

Code:
SELECT max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = [dbo].[tmp3]

versucht auszuführen nur die Meldung "Der mehrteilige Bezeichner 'dbo.tmp3' konnte nicht gebunden werden." kommt. Wobei ich nicht verstehe warum.
 
Habe das Problem gefunden. Und mein Ansatz mit den Umwandeln über mehrer Case When Funktion hat auch super geklappt.
 
Werbung:
Die , sind definitiv in Punkte zu wandeln da im Englischen das Komma Tausenderschritte seperiert und der Punkt die Cents. Dannach kann man natürlich alles mögliche prüfen, z.B. isnumeric() = 1, dann können höchstens noch zuviele Nachkommastellen kommen oder die Zahl für Money zu groß sein.
 
Zurück
Oben