Ssis

返回值的格式類似於 if cast as money

  • February 11, 2014

我客戶的系統非常過時,對此我無能為力。我想要實現的是總是提取至少有 2 位小數的值。

例如

1826.5695600000  
1826.3000000000  
34.2300000000  
0.0030000000  

1826.56956 
1826.30 
34.23 
0.003 

如果我在money失去第 4 位小數後的所有內容時轉換這些值,但我需要實現類似但最少 2 最多 10 位小數的東西。最後是否是字元串並不重要,重要的是我可以以這種格式提取值。

我的第一次嘗試是轉換為浮點數,找到小數點並相應地將值轉換為小數(20,變數),但這是不可能的,所以我現在一直在想如何實現這一點。

這些值正在通過 SSIS 流程

  • 從數據庫中提取
  • 分階段
  • 推送到客戶端的導入文件

這真的很醜陋,希望可以作為一個教訓,讓您了解為什麼您應該修復接收系統,以免對尾隨零如此挑剔。

DECLARE @t TABLE(a DECIMAL(20,10));

INSERT @t VALUES
(1826.5695600000),  
(1826.3000000000),  
(  34.2300000000),  
(   0.0030000000);

DECLARE @d INT = 10; -- number of decimal places in source data!

;WITH s(a,dot,nz) AS 
(
 SELECT 
   CONVERT(VARCHAR(32),a),
   PATINDEX('%.%',CONVERT(VARCHAR(32),a)),
   PATINDEX('%[^0]%',REVERSE(a))
 FROM @t
)
SELECT LEFT(a,dot)+SUBSTRING(a,dot+1,@d+1-nz)
 + COALESCE(REPLICATE('0',nz-(@d-1)),'')
FROM s;

結果:

1826.56956
1826.30
34.23
0.003

這假定源數據類型是小數(某物,10)。如果它是一個字元串,您需要在此處對不是數字的值(或從這個意義上說不是真正的數字)採取一些額外的預防措施。

引用自:https://dba.stackexchange.com/questions/58684