我有一个列Quantity
的表格;在原始表中,此列定义为nvarchar(100)
,因此我需要将其转换为float以便能够进行一些分析:
CAST([Quantity] AS FLOAT) AS Quantity
问题是我有一些值无法像No-Quantity
,Return
那样转换为浮点数。我要使用过滤器来排除这些值,然后将rest转换为float.On选项是使用where子句:
WHERE Quantity IN ('Return', 'Sales')
这不是最好的方法,因为如果我们在原始表中有新值,那么我需要弄清楚它是什么并将其添加到where子句中。
我想知道是否有更好的方法来识别不可兑换的价值?
答案 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