这是我试图运行的查询...
SELECT *,STUFF(PartNumber,1,3,'')
FROM [devbivarcom].[Products].[Products]
ORDER BY CAST(STUFF(PartNumber,1,3,'')AS FLOAT)
有关我可能收到错误的原因的任何想法?
由于
答案 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> <> '.')