例如excel中有一列数据
xmbm2
110200005
111000002①
111000002
120100001①
120100002
120100003
用sql2005的导入导出工具创建新表,目标列是varchar(50),结果是带①的数据会为null
OpenDataSource查询时也是null,
变通的方法是把此列所有行前面加个字母,就正确了,或先导入access再导入sql2005
如何直接修改sql2005总想处理为数字类型的方式?
SELECT xmbm2,CAST(xmbm2 AS VARCHAR(20)) AS xmbm2b
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="d:\book3.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet2$]
------解决思路----------------------
混合数据类型列的强制解析——IMEX=1
SELECT * INTO temp1
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\***.xls;Extended properties="Excel 5.0;HDR=Yes;IMEX=1', 'SELECT * FROM ***) ;
------解决思路----------------------
悲剧,确实是的,我以前遇到你说的情况,是设置了IMEX=1解决的,文本正常了,但是纯数值又变成科学计数法了,
那建议可行的话,到两遍,然后把数据合并一下
再不行的话,excel的那一列,加个特殊字符,按照文本来处理,导入数据库后再把这个文本给替换掉
------解决思路----------------------
试试在加上单引号‘在前面,通常这样就会变成字符了。
------解决思路----------------------
把excel的数据类型先改掉。
导入的时候在设置对应的列的类型。
以上要是不成功,就只能处理excel数据了,分开导~~
------解决思路----------------------
既然是导数据,Excel 的格式是不要的,所以先存成 csv,再导入,
用 formatfile 指定格式,参考这个帖子,虽然问题不一样。
------解决思路----------------------
这需要在EXCEL上处理,把EXCEL内容复制在记事本,把EXCEL所有栏位改主文本,再把记事本内容复制回EXCEL,再用语句查看一下是否解决
------解决思路----------------------
通常EXCEL默认类型造成的
------解决思路----------------------
这种建议进行2次类型转化,一次类型转化是不够的。
cast(cast( xx as nvarchar(30)) as numeric(30))