SQL IsNumeric Gibt True zurück, aber SQL Reports 'Umwandlung Fehlgeschlagen'
Vorausgesetzt, die folgenden Daten:
Column1 (data type: varchar(50))
--------
11.6
-1
1,000
10"
Non-Numeric String
Ich habe eine Abfrage, die Daten aus dieser Spalte und möchte feststellen, ob der Wert eine Zahl ist, dann schicken Sie es als solche in meiner Abfrage. So mache ich die folgenden
SELECT CASE
WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN Replace(Column1, '"', '')
ELSE 0
END AS NumericValue
SQL reporting zurück:
Fehler bei der Konvertierung beim konvertieren den varchar-Wert '11.6' in den int-Datentyp.
Warum? Ich habe auch versucht zu zwingen, Darsteller:
SELECT CASE
WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN cast(Replace(Column1, '"', '') AS float)
ELSE 0
END AS NumericValue
Und ich bekam:
Fehler beim konvertieren von Datentyp varchar zu schweben.
IsNumeric()
akzeptieren doubles/floats/singles etc. Auch, es überprüft nicht die overflows (99999999999999999999999999999
numerisch ist, wird nicht konvertieren, um die meisten Arten). Die beste Praxis-für die Art der situation ist, dass Sie nicht speichern Sie numerische Daten in string-Felder in den ersten Platz.InformationsquelleAutor Kyle Ballard | 2009-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen Sie das Komma mit einem Punkt:
SQL Server
Ausgänge dezimal-Trennzeichen definiert das Gebietsschema, aber nicht das verstehen aber alles andere als eine Periode, inCAST
s, um numerische Typen.so '1,000' wird 1?
Nein, ich entfernt das Komma ganz.
In einigen Gebietsschemas werden (mir zum Beispiel), "1,000" ist 1. Eine "tausend" wird "1 000,00".
Das war wirklich hilfreich für mich, danke
InformationsquelleAutor Quassnoi
Zuerst konvertieren Sie die Zeichenfolge in Geld, dann verdeckten Sie zu jedem anderen numerischen format, da Geld geben gibt eine wahre numerische Zeichenfolge immer. Sie werden niemals einen Fehler dann.
Versuchen Sie die folgenden in Ihrer Abfrage, und du wirst wissen, was ich Rede. Beide zurück 2345.5656. Das Geld datatype gerundet auf 4 Dezimalstellen und damit die casting-Ursachen Rundung auf 4 Dezimalstellen.
Cast( cast('2,344' als Geld) as float) perfekt funktionieren oder
cast( cast('2,344' als Geld), als decimal(7,2)) wird auch funktionieren.
Sogar cast(cast('$2,345.56556' als Geld) als int ) funktioniert perfekt Runden auf nächste Ganzzahl.
InformationsquelleAutor Polina F.
Gibt es viele Probleme mit der SQL isnumeric. Zum Beispiel:
Diese gibt 1 zurück, aber in vielen Sprachen, wenn Sie versuchen, ihn in eine Zahl umzuwandeln wird es scheitern. Ein besserer Ansatz erstellen Sie Ihre eigenen Benutzer-definierte Funktion mit den Parametern, die Sie überprüfen müssen:
http://www.tek-tips.com/faqs.cfm?fid=6423
InformationsquelleAutor brendan
ISNUMERIC gibt 1 zurück, wenn die Eingabe-Ausdruck ist eine gültige Ganzzahl, Gleitkommazahl, money-oder decimal-Typ;
Also das problem ist, es ist eine gültige Nummer, aber keine gültige int.
evtl. das Komma in 1.000
InformationsquelleAutor dotjoe
Kyle,
Ich denke, das löst das problem. Das problem liegt in der Tatsache, dass die ELSE-Klausel initialisiert Sie Ihr Ergebnis auf eine ganze Zahl sein. Durch einen expliziten typecast zu FLOAT und hinzufügen der Vorschlag von Quassnoi, es scheint zu funktionieren.
Grüße,
Lieven
InformationsquelleAutor Lieven Keersmaekers
IsNumeric(' ')
auch gibt 1 zurück, aber dann warf als int in die Luft sprengt. Brendan oben sagt deine eigene Funktion schreiben. Er ist korrekt.IsNumeric(' ')
zurück0
.InformationsquelleAutor user489390
Diese Lösung funktioniert nicht in allen Fällen (insbesondere zahlen mit Geld und/oder Tausender-Trennzeichen). Verketten Sie eine exponent-Darstellung, um am Ende die Zahl, die dargestellt wird durch eine Zeichenfolge...ISNUMERIC() funktioniert von dort aus. Beispiele:
Diese, zumindest standardisiert sowohl das format zur Verwendung der REPLACE () - Funktion.
InformationsquelleAutor user2284133
Habe ich nur treffen dieses Problem.
Können Sie versuchen, diese Lösung, wenn Sie nichts dagegen haben, über die Beschränkung der dezimal-Länge.
HINWEIS:
InformationsquelleAutor Hung Doan