错误无法将数据类型 nvarchar 转换为浮点数

Chi*_*keh 5 sql sql-server

我已经搜索了这个很棒的论坛并在谷歌上搜索,但无法解决这个问题。

我们有两张桌子(相信我,我与这些桌子无关)。两个表都有一个名为的列eventId.

但是,在一个表中,数据类型为eventId是,float而在另一个表中,它是nvarchar

我们从table1where eventIis defined as中选择float并将该 Id 保存到table2where eventIdis defined asnvarchar(50)

由于数据类型不一致,我们在将数据类型转换nvarcharfloat.

在不玩弄数据库的情况下,我想强制转换eventId以摆脱此错误。

任何想法我在下面的代码中做错了什么?

SELECT 
    CAST(CAST(a.event_id AS NVARCHAR(50)) AS FLOAT) event_id_vre,
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

问题很可能是因为某些行event_id是空的。有两种方法可以解决这个问题:

  • 将您的 转换floatnvarchar,而不是相反- 这种转换将始终成功。这里唯一的问题是文本表示是否不同 - 例如,带有float-as-的表nvarchar使用较少的十进制数字,或者
  • 在转换之前添加一个条件来检查空 ID - 如果某些事件 ID 是非空字符串,这可能不起作用,但它们也不是可浮点转换的(例如,字段中有一个单词而不是数字)。

第二种解决方案如下所示:

SELECT 
     case when a.eventid <> '' 
            then cast(cast(a.event_id as nvarchar(50)) as float) 
          ELSE 0.0 
     END AS event_id_vre,
Run Code Online (Sandbox Code Playgroud)