【问题标题】:SQL convert nvarchar to floatSQL 将 nvarchar 转换为浮点数
【发布时间】:2017-07-21 05:57:39
【问题描述】:

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

CAST([Quantity] AS FLOAT) AS Quantity      

问题是我有一些无法转换为浮点数的值,例如No-QuantityReturn 等。我有过滤器来排除这些值,然后将其余值转换为浮点数。On 选项是使用 where 子句:

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

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

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

【问题讨论】:

  • 在sql server中使用try_convert,如果不能转换则返回null
  • 用您正在使用的数据库标记您的问题。

标签: sql type-conversion


【解决方案1】:

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

【讨论】:

  • 我正在尝试使用 Select CAST(col1 as float) New_col1 from table1 将 NVARCHAR 转换为浮点数。我得到 将数据类型 nvarchar 转换为浮点数时出错。
  • @Duffer 。 . .如果您有问题,您应该将其作为一个问题提出,并提供充足的数据、期望的结果以及对您想要的逻辑的解释。
  • 我认为这与这篇文章有关,所以在评论中发布。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2017-03-23
      • 2017-03-15
      • 2012-02-26
      • 2011-05-18
      相关资源
      最近更新 更多