2017-05-09 2 views
2

nvarchar(255)データ型をmoneyに変換しようとしていますが、次のエラーメッセージが表示されます: "char値をmoneyに変換できません。nvarcharとmoneyの間のSQL変換の問題

私がStockoverflowで見つけたものは、isNullを次の形式で追加することを提案していますが、私はまだ同じエラーが発生しています。

SUM(isnull(cast(tbl_ALL_DATA_REPORT.[30_days_ago_sales] as money),0)) AS SumOf30_Days_Ago, 

私がここで間違っている可能性はありますか?

enter image description here

+0

実際のお金の種類から離れることになります。次に、有効なデータ変換タイプのチャートを示します。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine –

+0

変換しようとしているデータの例をいくつか教えてください。 –

+0

@ Jacob H - 私はいくつかの行のスナップショットを撮った。私はあなたがそれを見ることができることを望む。だから私はNULL valusを持っていると私は10535.950000001または520.190000000005などがあります – Slavisha

答えて

0

値の一部がそれに無効な文字があります..あなたは、あなたのシナリオではtry_cast

declare @n nvarchar(50) = '50n.25' 
select isnull(try_cast(@n as money), 0) 

を使用して

SUM(isnull(try_cast(tbl_ALL_DATA_REPORT.[30_days_ago_sales] as money),0)) AS SumOf30_Days_Ago, 
0

を試すことができます内側にあなたのISNULLで、これを試してみてくださいキャスト:

SUM(cast(ISNULL(tbl_ALL_DATA_REPORT.[30_days_ago_sales],0) as DECIMAL(19,12))) AS SumOf30_Days_Ago, 

また、MONEYは小数点以下5桁までですので、MONEYをDECIMALに変更しました。

+0

@ジャック・H - 私はこれを試して、私は得ています: "数値データ型nvarcharを変換するエラー。 – Slavisha

+0

私は、単一の値でテストを試してみるといいでしょう。データに関連する可能性があります。 –

0

変換できないデータセットの一部として、無効な文字や数字ではない可能性があります。

DECLARE @X TABLE (val VARCHAR(8)); 

INSERT INTO @X (val) VALUES (NULL), ('abc'),('4'),('%&Crazy') 

Select 
    val AS ASIS 
, ISNULL(val, 0) AS firstCastWillWorkForNullsNotMuchElse 
, CASE WHEN ISNUMERIC(ISNULL(val, 0)) <> 0 THEN ISNULL(val, 0) ELSE 0 END AS secondCastToCheckNumeric 
, CAST(CASE WHEN ISNUMERIC(ISNULL(val, 0)) <> 0 THEN ISNULL(val, 0) ELSE 0 END AS MONEY) AS thirdCastDoesItAll 
From @X