当前位置: 代码迷 >> Sql Server >> 从数据类型 varchar 转换为 numeric 时出错。怎么办
  详细解决方案

从数据类型 varchar 转换为 numeric 时出错。怎么办

热度:1319   发布时间:2016-04-24 09:16:28.0
从数据类型 varchar 转换为 numeric 时出错。怎么处理?
背景介绍:
  我处理的是txt文件,txt文件的样式:

       一直没法导入,后来一位大牛告诉我说是因为我的txt文件是用asc文件转过来的,本来asc文件是有换行符的,但是window不承认,所以他就说用16进制代替换行符就行了-----------导入果真成功了。
       
问题描述:
        我需要统计的是第三列中所有正数(>0)的和,  我的主要数据是这个样子的:


        我的代码如下:

        代码上半部分就是导入txt文件。下半部分就是统计工作。
      
         但是得到的结果是:
 
所以这是为什么?怎么办?请教诸位!
------解决思路----------------------
错误信息提示很明显,数据类型转化失败,由于你的字段没给出,我猜测你在tex文档中的数据所在字段值应该是文本,包含了字母e,+等符号,是不能直接转换为numeric数据类型的
------解决思路----------------------
;WITH t1 AS (
    SELECT Reverse(...) as sz -- 先不要转换
      FROM #y2801
)
,t2 AS (
    SELECT CASE WHEN ISNUMERIC(sz)=1 THEN
                cast(sz AS decimal(12,8))
           ELSE
                NULL -- 反正最后不统计,用 NULL 好了
           END AS sz
      FROM t1
)
SELECT ... -- 统计
  FROM t2
 WHERE sz > 0.0

------解决思路----------------------
引用
@u011015550  直接是 列名3  吗? 代码带入显示 列名3  无效。



你不是将txt文档导入到数据库里面了么?
导入到什么数据库是哪个你知道么?

use 数据库名
go

select * from 导入的数据的表名 --会显示你导入数据的结果集啊,如果没有,你是否具有修改该表的权限呢,改改该表

--可以先替换掉里面的e+

update #y280 set 列名3=replace(列名3,'e+','0')     --我说的列名3只是个假设,具体要看你处理的字段名,如果确实没有字段名这种情况,用列名3肯定是不行的,那建议你可以考虑用导入向导导入数据,可以新建好表再导入txt文档中的数据,方便后面处理

----如果你只要显示不小于0的数据
--然后通过where语句删选即可啊

select * from #y280 where 列名3>0

  相关解决方案