varcharとして格納されている10進値のデータセットがあります。 8.0より小さいすべての値を返す必要があります。 これは私のクエリです:私はこのクエリを実行すると値が比較されるときにデータ型varcharを数値に変換するエラー。where句で
;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
私はエラーを取得する:私は、WHERE句なしでクエリを実行すると
converting data type varchar to numeric
値は5.0から16.9までの範囲。 他の列は単なるIDフィールドです。 Value
フィールドは、CTEクエリの数値に変換されます。
なぜwhere句にエラーがありますか?
更新日 合計行は228です。返されるのは144ですが、39が返されます。
http://stackoverflow.com/q/41109677/6167855である値を隔離するISNUMERICを使用して注意してください – scsimon
実際の数字。物 "1e8"、 "¢"、 "$"すべてが1で評価されますが、あなたの述語で例外がスローされます。私にとっては、あなたが持っている最大の問題は、varcharの列に10進数で何を決定するかを格納することです。あなたは明らかに実際に小数ではないいくつかの値を持っています。 –