2011-10-10 71 views
1

我有具有將稍後在導入過程被轉化成decimal(9,3)數據的列[Cash] nvarchar(50),一些數據與正常外觀數值如134.630,-80.662一致324.372。偶爾我有多個點的數字值的數據,如1.324.372 and -2.134.630.有沒有辦法去除這個額外的點。轉換爲有效的十進制數據類型

+1

不''-2.134.630.''有在最後一個點一樣好,甚至是一個句號? –

+0

所以,數字分組符號是'.'。什麼是小數點分隔符? –

+1

您可以更確切地指定行爲嗎?例如,所有的值都有3位小數。正如所寫,實際上並不清楚數字*應該是...... – MatBailie

回答

1
declare @yourtable table(cash varchar(20)) 
insert @yourtable values('1.324.372') 
insert @yourtable values('-2.134.630') 
insert @yourtable values('1.234.567.89') 

舊代碼:

select reverse(replace(replace(stuff(reverse(cash), charindex(
    '.', reverse(cash)), 1, ','), '.', ''), ',', '.')) 
from @yourtable 

稍微升級代碼(結果是一樣的):

select reverse(stuff(reverse(replace(cash, '.', '')), 
    charindex('.', reverse(cash)), 1, '.')) 
from @yourtable 

結果:

1324.372 
-2134.630 
1234567.89 
+0

輝煌的成果。感謝您的幫助 –

1

你可以;

select case when len(cash) - len(replace(cash, '.', '')) > 1 then 
    reverse(stuff(reverse(cash), charindex('.', reverse(cash)), 1, '')) 
else  
    cash 
end 
from T 
+0

這是我最初嘗試的 –

0

創建包含具有適當值的計算字段的視圖。

這樣你仍然可以看到varchar值和相應的十進制值。

像這樣:

選擇 [現金], 鑄造(替換([現金], '')爲十進制 '')從....

爲[CashDecimal]