2016-11-18 33 views
0

我在SQL Server 2008中有這個疑問:錯誤將varchar爲十進制

select ID,CAST(replace(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7),',','.')AS DECIMAL (16,7)),  
from T1 

這回投的錯誤。

要找到哪裏出了問題我試過如下:

select ID,SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7), 
isnumeric(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7))  
from T1 
where isnumeric(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7))<>1 

但它返回0行,那麼我想,所有的值都投他們爲十進制可行的,但是當我運行第一個查詢它失敗。

我是否會誤解產生問題的東西?

P.D:Value是varchar數據類型。

+0

您是否嘗試過在第一個查詢中找到失敗的實際行? –

+2

提供樣本數據。 「價值」的數據類型是什麼?還提供了什麼是拋出的錯誤? – Viki888

+0

@ LasseV.Karlsen是的,正如我上面解釋的那樣,我正在嘗試使用第二個查詢 – Maik

回答

0

如果您正在使用2012,那麼你可以使用Try_Convert()

但是,有一種方式來獲得這種通過使用CASE語句與2008年的工作。這是有效的,因爲CASE在找到匹配時停止評估。

下面是Varchar to Int的一個簡單示例,但您可以輕鬆地將其適用於Decimal。

CASE WHEN [value] LIKE '%[^0-9]%' THEN [value] 
ELSE Convert(varchar(20), CAST([value] as INT)) 
END 
+0

我更改爲十進制轉換爲Int,但select返回沒有問題的所有行:S – Maik