對於CSV檔案中{,}和{"}的處理

magicgao8888發表於2009-03-16

問題如下:

在SSIS做ETL的時候,需要處理的原始檔中的列有字元,也有數字,例如:

NetRate / GDS Transactions Instances
NetRate 9,520 9,520
GDS 374 374

基於csv檔案自身的特點,以 {,} 作為 Column delimiter,但是在這個csv檔案中 Transactions和Instances中的數值存在科學計數,也就是遇到千,百萬……會自動以"," 分開,而且有科學計數必定帶引號{"}. 所以在處理的時候很難. 建議客戶修改儲存csv檔案的格式,被否定.因為原始檔是第三方程式提供的,所以只有自己藉助臨時表搞定,把 Transactions 和 Instances合併起來作為一列,藉助臨時表處理。

那麼合併後未處理的原始資料:

Transactions+Instances

"9,520","9,520"

374,374

這樣迴圈的去找{"}出現的位置就OK了。

舉例如下:

declare @str as varchar(100)
declare @position as int

set @str = '"9,520","9,520"'
set @position = 1

while @position>0
begin
        set @position = charindex('"',@str)

        if @position >0
        begin
                select substring(@str,1, @position-1)
                set @str = substring(@str,@position + 1,len(@str)-@position)  -- 移除
        end
        else
        begin
                select @str
        end
end

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14321372/viewspace-567560/,如需轉載,請註明出處,否則將追究法律責任。

相關文章