原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重。
问题描述:
使用 MySQL 客户端工具导出 excel 数据,如果某个字段为纯数字,并且 length 过长,在导出的文件中,它就会以科学计数法表示。
如:使用 Navicat 将某表数据导出为 csv 文件时,其中 18 位的身份证号就会以科学计数法表示。
通过上面的图片示例,可以发现:
-
虽然数据库中身份证号已经是字符串类型,但是导出 excel 以后,过长的纯数字还是会被解析成科学计数法,没办法在 excel 中转义;
-
如果是明确的字符串,再长也不会出现科学计数法,比如:以'X'结尾的身份证号码。
所以,如何告知 MySQL 我们需要的是字符串,就是我们解决问题的思路。
解决方案:
在 MySQL 中,利用拼接函数
CONCAT(var1,var2)
,
有2类解决办法:
-
让 MySQL 自动识别它为字符串,方法是在需要处理的字段前面加【'】,例:
CONCAT('\'', pres_iden_no)
-
将字段转换成字符串,方法是在字段后面加【\t】(制表位),类似于Java字符串转换中的 + “” 操作,例:
CONCAT(pres_iden_no, '\t')
我用【\t】(制表位)的方法举例,因为是我常用的方法:
SELECT id,prov_id,prov_name,coop_name,coop_address,CONCAT(pres_iden_no, '\t') as pres_iden_no,pres_name,pres_mobile FROM 'PRES_INFO';
导出 csv 格式结果展示:
完美解决!!
有2种解决方案
将
导出
的
csv
用ultraedit打开,这个时候显示的是全的,不是
科学计数法
。然后将, 替换为^t,然后新建一个xls
文件
,将列全部设置为*文本格式* ,ultraedit内容全选粘贴到这个xls里即可
然后新建一个xls
文件
,将列全部设置为*文本格式* ,然后从数据-》导入数据 选择我们的
csv
进行导入即可
我要
导出
全部,我只能把
导出
变为
科学计数法
的contract_no这一列拼接‘\t’,名字设为contract_no1再显示一遍,
导出
后contract_no这一列是
科学计数法
表示,contract_no1列是正常文本方式显示,然后把contract_no这一列删除,用contract_no1的数据
经常遇到
MYSQL
导出
长
数字
或纯
数字
字符串(如身份证、卡券号、条码、流水号等)到
csv
或excel
文件
,用excel打开会显示为
科学
记数法,甚至后几位转为0。这是由Excel的特性决定的:Excel显示11位以上的
数字
时,会自动转化为
科学计数法
,如果长度大于15位,15位以后
数字
还会转成0。
1、CONCAT("\t",str)
如果只是展示、打印倒无妨,但如果需要后续引用该字符串(如用VLO...