SSIS / SQL Server – 处理各种货币types符号

在一个SQL Server的钱列如何处理通过SSIS(在varchar – 转化为货币)从国家特定的Excel文件进​​来的不同的货币符号,照顾逗号和点表示,以确保值保持正确?

例如,如果这些是Excel中的三个列值:

22,333.44

22.333,44

22333,44

上面的第一个符号将导致22,3334,这当然是不正确的。

我需要怎样处理这些数据? 是一个stringreplace或更优雅的东西?

谢谢。

更新:在意见讨论后,问题已澄清。 excel列中的值可以是许多不同的区域格式(英文使用逗号分隔数千,“。”表示小数点,德语使用“。”表示千位,逗号表示小数点)。

假设目的地格式是英文,而且没有附带的栏目来表示格式,那么你就必须实施一个解决方法。 如果你可以保证在“小数点后面”(德文格式的逗号)后总是有2个数字,那么REPLACE(REPLACE(@Value,',',''),'。','')将会消除每一个逗号/点。 然后你将不得不得到的结果varchar的长度和手动插入最后2个字符前的小数(或逗号)。 以下是一个示例实现:

declare @number varchar(12),@trimmednumber varchar(12),@inserteddecimal varchar(12) set @number='22.333,44' select @trimmednumber=REPLACE(REPLACE(@number,',',''),'.','') select @inserteddecimal=(LEFT(@trimmednumber,len(@trimmednumber)-2) + '.' + RIGHT(@trimmednumber,2)) select @number AS [Original],@trimmednumber AS [Trimmed],@inserteddecimal AS [Result] 

结果是:

 Original Trimmed Result ------------ ------------ ------------ 22.333,44 2233344 22333.44 

原始答案:

我可能会误解你的问题,但如果你把这些值作为VARCHAR并将它们插入MONEY列,那么隐式转换应该是正确的。

以下是我一起testing的结果:

 declare @money_varchar1 varchar(12),@money_varchar2 varchar(12),@money_varchar3 varchar(12) set @money_varchar1='22,333.44' set @money_varchar2='22.333,44' set @money_varchar3='22333,22' declare @table table (Value money) insert into @table values (@money_varchar1) insert into @table values (@money_varchar2) insert into @table values (@money_varchar3) select * from @table 

结果是:

 Value --------------------- 22333.44 22.3334 2233322.00