varchar フィールドで SUM を実行しようとすると、エラー メッセージが表示されます。Cast を使用している場合でも、次のエラーが表示されますか?
Error converting data type varchar to numeric
SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
varchar フィールドで SUM を実行しようとすると、エラー メッセージが表示されます。Cast を使用している場合でも、次のエラーが表示されますか?
Error converting data type varchar to numeric
SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
この問題は、残高列に数値以外のデータが含まれている可能性があります。データが有効であれば、CAST も必要ありません。
SUM(ISNULL((balance-current_balance_amount)/100 ,0)) AS bal_diff
暗黙的な変換は、CAST 関数または CONVERT 関数を指定せずに発生する変換です。
VARCHAR から NUMERIC または FLOAT がこの例です。
小数点以下の桁数と「$」の可能性がある残高を扱っているため、MONEY への CAST で問題が解決するはずです。
SUM(ISNULL((CAST(balance AS MONEY)-current_balance_amount)/100 ,0))
CAST to MONEY の後でまだ問題を引き起こしている残高列に他の非数値データがある場合は、SELECT で CASE ステートメントを実行できます。
SUM(ISNULL(((CASE WHEN ISNUMERIC(balance) = 0 THEN NULL ELSE CAST(balance AS MONEY) END)-current_balance_amount)/100 ,0))
または、もっと良いのは、MONEY 型の新しい列を作成して、それを使い始めることです。
balance
が varchar フィールドであると仮定するとfloat
、計算を実行する前に、数値 (それが必要な場合) データ型にキャストする必要があります。
例えば/
SUM(
ISNULL(
(CAST(balance AS FLOAT)-current_balance_amount)/100
,0)
) AS bal_diff