日期:2014-05-18  浏览次数:20617 次

怎样把中间以不定空格为间隔符的TXT数据文件导入Sql Server中?
从纯真网络上下的IP库,解压成txt文件后,数据格式如下:
0.0.0.0                   0.255.255.255       IANA     CZ88.NET
1.0.0.0                   1.255.255.255       IANA     CZ88.NET
2.0.0.0                   2.255.255.255       IANA     CZ88.NET
3.0.0.0                   3.255.255.255       美国   新泽西通用电气公司
4.0.0.0                   4.10.255.255         美国     CZ88.NET
4.11.0.0                 4.11.255.255         美国   夏威夷
4.12.0.0                 4.19.77.255           美国     CZ88.NET
4.19.78.0               4.19.78.255           美国   西南政法大学
4.19.79.0               4.19.79.63             美国   Armed   Forces   Radio/Television
4.19.79.64             4.21.177.111         美国     CZ88.NET
4.21.177.112         4.21.177.127         美国   Kraft   Group
4.21.177.128         4.21.177.255         美国   南新汉普郡学院
4.21.178.0             4.36.124.127         美国     CZ88.NET
4.36.124.128         4.36.124.255         美国   Technical   Resource   Connections   Inc
4.36.125.0             4.36.127.255         美国   坦帕大学
4.36.128.0             4.37.215.255         美国     CZ88.NET
4.37.216.0             4.37.219.255         美国   德克萨斯女子大学
4.37.220.0             4.41.60.255           美国     CZ88.NET
4.41.61.0               4.41.61.255           美国   EARTHLINK公司
4.41.62.0               4.43.68.255           美国     CZ88.NET
4.43.69.0               4.43.69.95             美国   罗斯门特学院
三个字段以不定空格为间隔符,但是也不能把空格替换成别的,因为ip所属地区有空格,这样的数据怎么导入Sql   Server中呀?直接导入时候必须选择间隔符,所一些上述数据就被认为一个字段。
但是导入Access中没有问题,可以选择固定宽度,把地区的宽度弄长一些就可以了。
呵呵,不要告诉我:先导入   Access中,然后再导入Sql   Server中。


------解决方案--------------------
先作为一个字段 COL1 导入数据库中的中间表 MID ,然后用substring()函数来取数据:

insert into 目标表(...)
select
rtrim(left(COL1 ,16)) as 起始IP,
rtrim(substring(COL1,17,16)) as 截至IP,
stuff(COL1,1,32, ' ') as 地区信息描述
from
MID
------解决方案--------------------
直接dts都可以啊

设定为固定间隔的字段就可以了
------解决方案--------------------
RTRIM()!应该用这个吧,要是会编程的话可以现将数据转换一下
------解决方案--------------------