Ssis
返回值的格式類似於 if cast as money
我客戶的系統非常過時,對此我無能為力。我想要實現的是總是提取至少有 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)。如果它是一個字元串,您需要在此處對不是數字的值(或從這個意義上說不是真正的數字)採取一些額外的預防措施。