从数据类型 nvarchar 转换为 numeric 时出错。该怎么解决?

xuzhaochenyi 2010-02-27 08:16:58
我在将nvarchar字符强制转换为numeric报错。
其格式如下:
select cast(h.U_SecondUnit as numeric)
from [@ava_oime] h
我也知道数据表[@ava_oime]中的 U_SecondUnit 字段中有字符,需要限制,如果在后面加个限制:
select cast(h.U_SecondUnit as numeric)
from [@ava_oime] h
where isnumeric(h.u_secondunit) =1
就会把大量的数据去除掉的,所以这样也不可行。那我该怎么办才好,数据库中的表[@ava_oime]的字段类型是不能修改的。

请各位大侠帮帮我解决下,我在这里不胜感激啊!!
...全文
10311 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
引用 10 楼 josy 的回复:
引用 7 楼 xuzhaochenyi 的回复:引用 6 楼 josy 的回复: 引用 3 楼 xuzhaochenyi 的回复:我用 SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。 请教josy 大侠,我下来该怎么替代的,谢谢! 弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据? 原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。

如果只是要求不报错,不取含有中文或者null里面的数据的话,直接用0替代就可以了
类似这样:
SQL codeselectcasewhenisnumeric(h.u_secondunit)=1thencast(h.U_SecondUnitas numeric)else0endfrom[@ava_oime] h




我刚才测试了下,应该要将其他类型置为0,才可以的,这样在将转化的数据再插入另外一个表的时候,才有结果的.谢谢大侠!
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
引用 8 楼 guguda2008 的回复:
你这样写试试
SQL codeselectCASEWHENISNUMERIC(H.U_SECONDUNIT)=1THENcast(h.U_SecondUnitas numeric)ELSENULLENDfrom[@ava_oime] h


谢谢,这样是可行的。谢谢!
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
引用 7 楼 xuzhaochenyi 的回复:
引用 6 楼 josy 的回复:引用 3 楼 xuzhaochenyi 的回复:我用 SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。 请教josy 大侠,我下来该怎么替代的,谢谢! 弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据?

原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。


数据结果的截图
百年树人 2010-02-27
  • 打赏
  • 举报
回复
引用 7 楼 xuzhaochenyi 的回复:
引用 6 楼 josy 的回复:
引用 3 楼 xuzhaochenyi 的回复:我用 SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。 请教josy 大侠,我下来该怎么替代的,谢谢!

弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据?

原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。


如果只是要求不报错,不取含有中文或者null里面的数据的话,直接用0替代就可以了
类似这样:
select  
case
when isnumeric(h.u_secondunit)=1 then cast(h.U_SecondUnit as numeric)
else 0
end
from [@ava_oime] h
htl258_Tony 2010-02-27
  • 打赏
  • 举报
回复
引用 7 楼 xuzhaochenyi 的回复:
引用 6 楼 josy 的回复:引用 3 楼 xuzhaochenyi 的回复:我用 SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。 请教josy 大侠,我下来该怎么替代的,谢谢! 弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据?

原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。

看不到图片,你贴数据上来就行了.
guguda2008 2010-02-27
  • 打赏
  • 举报
回复
你这样写试试

select CASE WHEN ISNUMERIC(H.U_SECONDUNIT)=1 THEN cast(h.U_SecondUnit as numeric) ELSE NULL END
from [@ava_oime] h
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
引用 6 楼 josy 的回复:
引用 3 楼 xuzhaochenyi 的回复:我用 SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。 请教josy 大侠,我下来该怎么替代的,谢谢!

弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据?


原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。
百年树人 2010-02-27
  • 打赏
  • 举报
回复
引用 3 楼 xuzhaochenyi 的回复:
我用
SQL codeselect h.U_SecondUnitfrom[@ava_oime] hwhereisnumeric(h.u_secondunit)=0
查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。

请教josy 大侠,我下来该怎么替代的,谢谢!


弄点数据上来看看,原始数据是怎么样的,并说明一下你替换后要取什么样的数据?
ACMAIN_CHM 2010-02-27
  • 打赏
  • 举报
回复
用case 先判断一下。
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
引用 2 楼 htl258 的回复:
SQL codeselectcast(U_SecondUnitas numeric)from (select*from[@ava_oime] hwhereisnumeric(h.u_secondunit)=1
)as t这样呢?


这样的结果,还只是限制过的数据。我要的数据不能有限制和被过滤掉的。
xuzhaochenyi 2010-02-27
  • 打赏
  • 举报
回复
我用

select h.U_SecondUnit
from [@ava_oime] h
where isnumeric(h.u_secondunit) =0

查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。

请教josy 大侠,我下来该怎么替代的,谢谢!
htl258_Tony 2010-02-27
  • 打赏
  • 举报
回复
select  cast(U_SecondUnit as numeric) 
from (
select *
from [@ava_oime] h
where isnumeric(h.u_secondunit) =1
) as t
这样呢?
百年树人 2010-02-27
  • 打赏
  • 举报
回复
你先用
select  h.U_SecondUnit
from [@ava_oime] h
where isnumeric(h.u_secondunit) =0

查查那些不完全是数字的数据有什么规律,然后用replace把他们消掉,再转成数字

22,209

社区成员

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

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