SQL将nvarchar转换为float

时间:2017-03-01 18:50:06

标签: sql type-conversion

我有一个列Quantity的表格;在原始表中,此列定义为nvarchar(100),因此我需要将其转换为float以便能够进行一些分析:

CAST([Quantity] AS FLOAT) AS Quantity      

问题是我有一些值无法像No-QuantityReturn那样转换为浮点数。我要使用过滤器来排除这些值,然后将rest转换为float.On选项是使用where子句:

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

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

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

3 个答案:

答案 0 :(得分:4)

在任何数据库中,您都可以使用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()

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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