请教导出CSV文件之后的处理问题?

CTO 2015-06-14 04:40:32
之前用SQL导出几个表到单独的CSV文件(TAB分隔符);现在这些表已经被删除了,也没有备份。
在导出的CSV文件里发现某些导出的字段也包含TAB(之前用户从Word拷贝的!),导出的CSV没有表头,直接就是数据。

表已经在Unix的数据库表里建立了,和之前的数据库表是一一对应的。
现在想把这些CSV导入到另一个数据库(Unix)不知如何做?
...全文
433 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-06-18
  • 打赏
  • 举报
回复
错误数据只能人工修复。
严格一点应该写个程序,3列的自动转换,超过3列的需要人工修改。
偷懒一点用Excel,按照<TAB>分割的方式导入,操超过3列的修改,最后保存为csv。——这种方式可能会有其它特殊字符被 Excel 自动转换了,最好用文本比较工具比较一下结果和原始文件。
CTO 2015-06-18
  • 打赏
  • 举报
回复
嗯多谢,看来的确需要手工操作了。
Tiger_Zhao 2015-06-17
  • 打赏
  • 举报
回复
需要对文本进行替换,先把内容中的TAB用其它特殊文本(比如字符串 '\t')替换一下,成为:
Zhao,good,very good
Qian,good\tand bad,average

导入后再替换回来
UPDATE table1 SET B = REPLACE(B,'\t',CHAR(9))
SELECT * FROM table1 WHERE CHARINDEX(CHAR(9),B)<>0

A          B                    C
---------- -------------------- --------------------
Qian good and bad average

可以证明内容中有TAB(虽然显示成了空格)。
hery2002 2015-06-17
  • 打赏
  • 举报
回复
这种情况没有办法,只有人工处理, 你当时导出的数据本身有问题, 如果多余的<tab>在固定位置,或者固定栏位还好处理,replace掉即可。 如果不固定,那就只有人工处理了, 建议你先按照文本转列,先转出来,在处理有问题的列,这样有针对性一些。
CTO 2015-06-17
  • 打赏
  • 举报
回复
[quote=引用 9 楼 Tiger_Zhao 的回复:] 需要对文本进行替换,先把内容中的TAB用其它特殊文本(比如字符串 '\t')替换一下,成为:
Zhao,good,very good
Qian,good\tand bad,average
问题就在这里 - 替换不是把正常的TAB分隔符也替换了吗! 现在的文件内容是: Zhao<TAB>good<TAB>very good Qian<TAB>good<TAB>and bad<TAB>average
CTO 2015-06-16
  • 打赏
  • 举报
回复
引用 1 楼 hery2002 的回复:
先在CSV中用文本转列功能,转成列后,替代掉所有的TAB符号。 然后按照你数据库中的列的顺序导入数据库即可。 或者说是导入到数据库后,用TRIM函数来去掉也可以。
请问“先在CSV中用文本转列功能,转成列后,替代掉所有的TAB符号” 是什么意思? 现在的问题是某些列含有TAB符号,所以和分隔符号(也是TAB) 重复了,导致数据无法导入(比如表里定义5列,但是却有6列在某行里 - 由于多了一个TAB)。
hery2002 2015-06-16
  • 打赏
  • 举报
回复

先用这个转成对应的列,多出来的第6列,去掉即可。或者说是替换掉。
CTO 2015-06-16
  • 打赏
  • 举报
回复
不正常:]第一行三列,第二行四列。
yooq_csdn 2015-06-16
  • 打赏
  • 举报
回复
引用 6 楼 CTO 的回复:
还是不明白如何替换? 现在的文件是,比如: Zhao good very good Qian good and bad average 第二行的 good and bad 应该是同一列,但是现在and bad 跑到了第三列 (因为 and bad之前有一个TAB), 然后多出一列。 所以数据库导入时出错。
你用 excel 打开这个csv后,列正常吗?
CTO 2015-06-16
  • 打赏
  • 举报
回复
还是不明白如何替换? 现在的文件是,比如: Zhao good very good Qian good and bad average 第二行的 good and bad 应该是同一列,但是现在and bad 跑到了第三列 (因为 and bad之前有一个TAB), 然后多出一列。 所以数据库导入时出错。
Tiger_Zhao 2015-06-16
  • 打赏
  • 举报
回复
用制表符分割的叫TSV,用逗号分割的是CSV。
按照标准,TSV的字段值中不允许出现制表符;而CSV的字段值可以用单引号/双引号包起来,内部允许出现逗号。
你应该先把TSV转成CSV格式——假如定义定义5列,一行有4个TAB的就把TAB替换成逗号;超过的就需要人工参与一下,留下一些TAB
hery2002 2015-06-15
  • 打赏
  • 举报
回复
先在CSV中用文本转列功能,转成列后,替代掉所有的TAB符号。 然后按照你数据库中的列的顺序导入数据库即可。 或者说是导入到数据库后,用TRIM函数来去掉也可以。
shoppo0505 2015-06-15
  • 打赏
  • 举报
回复
不知道你unix数据库是什么性质的。 最不济,可以将CSV用Excel软件打开,然后拼接sql的insert语句

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧