2017-05-09 100 views
2

我想將nvarchar(255)數據類型轉換爲貨幣,並且出現此錯誤消息:「無法將char值轉換爲貨幣,char值的語法不正確。nvarchar和貨幣之間的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值,我有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內CAST:

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

此外,我將您的MONEY更改爲DECIMAL,因爲MONEY最多有5個小數位。

+0

@Jackob 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