将数据类型nvarchar转换为float时出错

时间:2014-02-05 15:48:24

标签: sql sql-server

这是我试图运行的查询...

 SELECT *,STUFF(PartNumber,1,3,'')
 FROM [devbivarcom].[Products].[Products]
 ORDER BY CAST(STUFF(PartNumber,1,3,'')AS FLOAT)

有关我可能收到错误的原因的任何想法?

由于

1 个答案:

答案 0 :(得分:3)

您收到错误,因为您要转换的字符不是浮点数。你可以这样做:

SELECT *, STUFF(PartNumber,1,3,'')
FROM [devbivarcom].[Products].[Products]
ORDER BY (case when isnumeric(STUFF(PartNumber,1,3,'')) = 1
               then CAST(STUFF(PartNumber,1,3,'')AS FLOAT)
          end);

如果您想查找有问题的值,请执行以下操作:

SELECT *, STUFF(PartNumber,1,3,'')
FROM [devbivarcom].[Products].[Products]
WHERE isnumeric(STUFF(PartNumber,1,3,'')) = 0 and PartNumber is not null;

编辑:

众所周知,

isnumeric()在识别价值方面存在一些问题。例如,当该字符串未正确转换时,它将'.'标识为有效。在大多数情况下,这就足够了。您可以使用其他条件来增强它,例如:

AND (<col> <> '.')