SQL Server Konvertierung einer Variablen vom Datentyp varchar Feld der Geld - /dezimal/etwas mit Nachkommastellen
Ich bin auf der Suche nach einem eleganten Weg, um zu konvertieren ein Feld vom Typ varchar, mit Variablen Daten, die auf eine Daten-Typ, die verwendet werden können, für mathematische Operationen sample-Daten aus dem Feld
(ohne Anführungszeichen)
''
'abc'
'23'
'23.2'
Sollte die Methode funktioniert für alle, und für die erste & der zweite Wert sollte 0 zurückgegeben werden, und nicht werfen Sie einen SQL-Server Fehler..
Oft, wenn Sie Daten von verschiedenen Arten gespeichert in einem Feld, es zeigt, dass Sie einen Datenbank-design-problem.
InformationsquelleAutor pablo | 2009-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Stellen Sie den Ziel-data-Typ, ich habe mich entschieden decimal(18, 2) für die demonstration.
IsNumeric ist eine böse kleine Funktion, so lange als eine Art konvertiert beliebige numerische Datentypen es gibt 1 zurück, aber Sie wissen nicht, welche Art wird zugestimmt hat, kann es zu konvertieren, so dass für die input '£1.20 " es wird einen Fehler auslösen, auf den cast, auch wenn Sie an die isnumeric.
vielen Dank für diese Informationen
was würden Sie dann tun, um zu vermeiden 1,20 Dollar Fehler?
Es ist unglaublich schwierig, £1.2 zu konvertieren, um Geld, das ist der Grund, warum die IsNumeric erlaubt, aber sich weigert zu konvertieren, um nichts anderes. '1e1' numerisch ist, weil es kann zu konvertieren, real oder float, aber nicht in einen int, dachte sogar, dass das Ergebnis eine ganze Zahl ist. Ich habe noch nie eine überzeugende Lösung, es ist bereits bedeckt in stackoverflow.com/questions/312054/... für Beispiele von workarounds, die alle mit vor-und Nachteilen.
InformationsquelleAutor Maximilian Mayerl
Ich weiß, das ist eine lange-tot-thread, aber vor kurzem habe ich stolperte über es aus einer Google-Suche und hatte einen Gedanken. Es ist weniger elegant als eine CASE-Anweisung, aber es ist eine alternative.
oder Sie tun können:
Die top-version sehen würde "2 5" nur 2, unten würde man sehen es als text-Feld.
InformationsquelleAutor RPh_Coder
InformationsquelleAutor Quassnoi
Wenn Sie möchten, um zu konvertieren, sollten Sie
UPDATE
stattSELECT
InformationsquelleAutor dp3
COALESCE
ist eine gute option für dieses: weitere Informationen Finden Sie hier. Es wertet die Argumente aus und gibt den aktuellen Wert des ersten Ausdrucks, der zunächst nicht bewerten zu NULL.ISNUMERIC
gibt 0 oder 1, je nachdem, ob der Wert nicht ausgewertet werden konnte, als einer der SQL 'Zahl' oder 'numerisch' - Typen. z.B. int -, bigint -, Geld..NULLIF
im wesentlichen feststellt, dass der Wert, den Sie angeben und wenn es passt, es ersetzt es mit einemNULL
Wert.CAST
Ändert einfach einen anderen Datentyp in diesem Beispiel zuMONEY
Wie Sie sehen können, wenn Sie brechen, die die unten unten mit Hilfe dieser Informationen Ihre durchaus eine elegante Lösung denke ich?!
InformationsquelleAutor d3m0n1cd4rkn355