2014-01-27 63 views
-3

任何想法,为什么我得到这个错误:错误转换数据类型

Error converting data type nvarchar to float 

使用此查询?

SELECT *,STUFF(PartNumber,1,3,'') 
FROM products.products 
ORDER BY CAST(STUFF(PartNumber,1,3,'')AS Float) 

感谢

+1

partnumber中是否有任何字符数据(如空格,输入的选项卡或非数字值?)如果是这样,那就是原因。运行'select * from products.products where isnumeric(stuff(partNumber,1,3,'')'来识别潜在的违规值。 – xQbert

回答

0

是否零件号有任何字符数据(如空格,输入的标签,或者非数字值?)如果是这样,这就是为什么。

select * from products.products where not isnumeric(stuff(partNumber,1,3,'') 

识别潜在的违规值。

select *, stuff(PartNumber,1,3,'') 
from products.products 
where isnumeric(stuff(partNumber,1,3,'') 
order by cast(Stuff(partNumber,1,3,'')As Float) 

得到一个有效的查询结果,但它会删除所有的非数字零件号码。

+0

它确实有空格等现在我在关键字'order '。使用你建议的查询 – user3241586

+0

错过了a)where子句 – xQbert

1

就在这里:

STUFF(PartNumber,1,3,'') 

之前,你甚至可以使用CAST(),你会得到错误由于您试图插入空字符串 - 这是一个nvarchar - 如果部分号码是浮动。

如果STUFF()不会导致错误(即,部分号码是不是float),那么结果包含一个过得去转换抓住一个nvarchar:

CAST(...). 

考虑到你告诉STUFF ()函数将nvarchar(空字符串'')放入partNumber中......这可能是您最好的线索......