问题如下:
在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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14321372/viewspace-567560/