0

varchar フィールドで SUM を実行しようとすると、エラー メッセージが表示されます。Cast を使用している場合でも、次のエラーが表示されますか?

Error converting data type varchar to numeric

SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
4

2 に答える 2

3

この問題は、残高列に数値以外のデータが含まれている可能性があります。データが有効であれば、CAST も必要ありません。

SUM(ISNULL((balance-current_balance_amount)/100 ,0)) AS bal_diff

CAST および CONVERTから:

暗黙的な変換は、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 型の新しい列を作成して、それを使い始めることです。

于 2012-11-19T15:37:08.650 に答える
1

balance が varchar フィールドであると仮定するとfloat、計算を実行する前に、数値 (それが必要な場合) データ型にキャストする必要があります。

例えば/

SUM(
  ISNULL(
    (CAST(balance AS FLOAT)-current_balance_amount)/100
  ,0)
) AS bal_diff
于 2012-11-19T15:09:31.620 に答える