2017-03-01 367 views
3

我有一个表Quantity列;在此列被定义为nvarchar(100)原来的表,所以我需要将它转换为浮动能够做一些分析:SQL将nvarchar转换为浮点数

CAST([Quantity] AS FLOAT) AS Quantity  

的问题是,我有一些值不能转换为float像No-QuantityReturn等我有过滤,除去这些值,然后转换其余float.On选择是使用WHERE子句:

WHERE Quantity IN ('Return', 'Sales') 

这是不是最好的方法,因为如果我们在原始表有重新值,那么我需要弄清楚它是什么并将其添加到where子句中。

我想知道是否有更好的方法来识别不可兑换的价值?

+2

使用'try_convert'在SQL Server中,返回'null'如果该值不能转换。 –

+2

用你正在使用的数据库标记你的问题。 –

回答

3

在任何数据库,你可以使用cast()和这样的:

(case when quantity not in ('No-Quantity', 'Return', . . .) 
     then CAST([Quantity] as float) 
end) as Quantity 

in清单将是已知的字符串值的列表。

你也可以做一个快速和肮脏的检查是这样的:

(case when left(quantity, 1) between '0' and '1' 
     then CAST([Quantity] as float) 
end) as Quantity 

(注意:您可能需要使用substr()substring()代替left()

而且,在一般情况下,任何特定的数据库都有特定的功能可以帮助进行转换,例如在评论中提到的try_convert()

0

如果您的SQL Server支持TRY_CONVERT,这可能提供了一个很好的解决方案:

SELECT TRY_CONVERT (float, [Quantity]) ... 

会给你根据输入的转换值或NULL。如果您没有严格控制数据,这可能会有所帮助。

0

另一种方式(如果你不能使用TRY_CONVERT

SELECT CAST(quantity AS float) 
FROM myTable 
WHERE IsNumeric(quantity) = 1 AND quantity IS NOT NULL