【问题标题】:SQL Server - error converting data type nvarchar to floatSQL Server - 将数据类型 nvarchar 转换为浮点数时出错
【发布时间】:2017-03-23 15:37:52
【问题描述】:

我正在将表 A 插入表 B。有问题的列看起来像 -$25.2。我首先替换了$ 并尝试了insert。遇到这个错误

将数据类型 nvarchar 转换为浮点数时出错。

然后我检查了

SELECT * 
FROM B 
WHERE ISNUMERIC([Col Name]) <> 1

没有返回任何结果。

这很奇怪。它应该返回一些东西。

接下来我应该检查什么?

我也尝试过类似的东西

CAST(REPLACE([Col Name], '-$', '') AS FLOAT)

【问题讨论】:

  • 不要使用 ISNUMERIC()。 $, ., ,, -, + 都返回 1,即使没有数字。 Try_Parse 更好
  • @dfundako: Try_Parse 不幸的是在 SQL Server 2008 中不可用 ...这是 2012 中的一个新功能 ...

标签: sql-server database sql-server-2008 tsql type-conversion


【解决方案1】:

试试这个

DECLARE @Text nvarchar(100)

SET @Text = '-$1234.567'
SET @Text = Replace(@Text,'$', '')
Select CONVERT(float, @Text) AS ColumnValue
Select ABS(CONVERT(float, @Text)) AS ColumnValue

【讨论】:

  • Try_Parse 不幸的是在 SQL Server 2008 中不可用 ...这是 2012 中的新功能 ...
  • 注意,我从答案中删除了它。
  • 这个答案对@John Hass 有帮助吗?
【解决方案2】:

虽然“金钱”数据类型不适合进行计算,但在这种情况下,您可以将其用作中介。

declare @a nvarchar(10)

set @a = '-$25.2'

select 
    @a,
    cast(cast(@a as money) as float)

仅当您的数据最多只有 4 位小数时才使用此选项,否则您将失去转换的精度。

【讨论】:

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