2

SQL Server のお金の列で、SSIS を介して国固有の Excel ファイル (varchar で - お金に変換) から入ってくるさまざまな通貨表記を処理するにはどうすればよいですか?

たとえば、これらが Excel の 3 つの列の値である場合:

22,333.44

22.333,44

22333,44

上記の最初の表記は 22,3334 になりますが、これはもちろん正しくありません。

データをどうする必要がありますか? それは文字列の置き換えですか、それともよりエレガントなものですか?

ありがとうございました。

4

1 に答える 1

2

更新: コメントで議論した後、問題が明確になりました。Excel 列の値は、さまざまな地域形式にすることができます (英語ではカンマを使用して千と小数点を区切り、「.」を使用し、ドイツ語では「.」を使用して千と小数点をカンマで区切ります)。

宛先の形式が英語で、形式を示す列が付随していないと仮定すると、回避策のクラッジを実装する必要があります。「小数点以下の桁数」(ドイツ語形式のコンマ) の後に常に 2 つの数字があることを保証できる場合、REPLACE(REPLACE(@Value,',',''),'.','') はすべてを取り除きます。コンマ/ポイント。次に、結果の varchar の長さを取得し、最後の 2 文字の前に手動で 10 進数 (またはコンマ) を挿入する必要があります。実装例は次のとおりです。

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 列に挿入すると、暗黙的な変換は正しいはずです。

テストのためにまとめたものは次のとおりです。

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
于 2012-09-11T08:52:28.810 に答える