Ich habe ein Dataset mit Dezimalwerten, die als varchar gespeichert werden. Ich muss alle Werte zurückgeben, die kleiner als 8.0 sind. Dies ist meine Frage:Fehler beim Konvertieren des Datentyps varchar in numerisch in sql, wenn der Wert in where-Klausel verglichen wird
;WITH CTE
AS
(
SELECT PatientEncounterID, CAST(value as numeric(3,1)) As Value
from Observation
where Term = 'HGBA1C' AND isnumeric(value) = 1
)
SELECT *
FROM CTE
WHERE Value < 8.0
Wenn ich diese Abfrage ausführen bekomme ich den Fehler:
converting data type varchar to numeric
Wenn ich die Abfrage ausführen, ohne die Klausel, wo die Werte von 5,0 bis 16,9 liegen. Die andere Spalte ist nur ein Identitätsfeld. Das Feld Value
wird in eine Zahl in der CTE-Abfrage konvertiert.
Warum kann der Where-Klausel-Fehler?
UPDATE Die Gesamtzahl der Zeilen ist 228. Es sollte 144 zurückgegeben werden, aber nur 39 zurückgegeben werden.
http://stackoverflow.com/q/41109677/6167855 – scsimon
Vorsicht ISNUMERIC unter Verwendung von Werten zu isolieren, sind eigentlich Zahlen. Dinge "1e8", "¢", "$." Alle werden mit isnumeric zu 1 ausgewertet, werfen aber eine Ausnahme mit Ihrem Prädikat auf. Für mich ist das größte Problem, das Sie haben, das zu speichern, was Sie in einer varchar-Spalte als dezimal deklarieren. Sie haben offensichtlich einige Werte, die keine Dezimalzahlen sind. –