【问题标题】:Cannot cast nvarchar to float无法将 nvarchar 转换为浮动
【发布时间】:2012-07-02 14:30:45
【问题描述】:

我有一个奇怪的问题。

在我的查询中,我选择了 5 列,其中两列是数字形式的 nvarchar(仅包含数字和精度点),另外三列是 uniqueIdentifiernvarchar

我想在我的 select 语句中将这两列强制转换为 Float,但出现错误

无法将 nvarchar 转换为浮点数。

我多次检查所有这些值的格式。相信我,他们很好。

但是当我只选择这两列并将它们转换为浮动时,查询运行成功。

感谢您对此主题的任何帮助。

我也可以在这里粘贴查询。但是整个查询超过 100 行,这将是令人沮丧的写作和阅读!

【问题讨论】:

  • 因此,与其发布 100 行查询,不如尝试将查询的大小减小到可以管理的程度,但 仍然存在问题。通常,在尝试执行此操作的过程中,您会获得对潜在问题的新见解 - 但就目前的问题而言,我怀疑我们能否为您提供帮助。
  • 相信我,优化器不会对你有仇。您的调试一定是意外地“证明”了某些东西是好的,而事实并非如此。你试过select cast(x as float) from yourTable吗?如果任一列都失败,您知道至少有一个值与该强制转换不兼容。然后尝试select top 100 x from yourTable order by x asc 然后desc;通常问题值处于极端。
  • 我试过这个。 “从 yourTable 中选择 cast(x as float)”效果很好。当我选择这些列旁边的其他列时,问题就出现了。
  • 使用 CAST 函数向我们展示几行查询。
  • @AshkanAleAli,您可能怀疑转换错误的列有误。

标签: sql sql-server tsql exception-handling casting


【解决方案1】:

在回答之前肯定需要您提供更多信息。您可以发布您的一些代码(或您的问题的小复制)吗?也许你的表定义也是如此?

既然所有的值都是数字,为什么要将列保留为 nvarchar?

最后,您的任何数据中是否包含美元符号 ($)?

这行得通:

DECLARE @Text nvarchar(100)

SET @Text = '1234.567'

SELECT CONVERT(float, @Text) AS ColumnValue

也是这样:

DECLARE @Text nvarchar(100)

SET @Text = '    1234.567    '

SELECT CONVERT(float, @Text) AS ColumnValue

但这不是:

DECLARE @Text nvarchar(100)

SET @Text = '$1234.567'

SELECT CONVERT(float, @Text) AS ColumnValue

【讨论】:

    【解决方案2】:

    不确定没有看到您的查询,但我认为这应该可行:

    SELECT CONVERT(Float(2), LTRIM(RTRIM(<nVarchar Column>))) AS Amount FROM ......
    

    【讨论】:

    • 想知道为什么 OP 将金额保留为 nvarchar。
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多