【问题标题】:SQL case statement then convert to intSQL case 语句然后转换为 int
【发布时间】:2019-10-01 12:39:20
【问题描述】:

我有一个要转换为 int 的字段,因此我可以转换为 count,但是该字段的某些值是 'null',所以遇到这些时我会遇到异常

Conversion failed when converting the nvarchar value '_____' to data type int.

我认为 id 可以执行以下操作,但我得到了相同的结果。

CAST( CASE [value] WHEN 'is null' THEN 1 ELSE [value] END AS INT) 

我想将 [value] 中的所有 null 值更改为 1,然后将所有 [value] 更改为 int,以便我可以计算此字段。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server reporting-services int case-when


【解决方案1】:

NULL 值转换为int 应该没有问题,所以我认为问题是字符串'NULL'

SQL Server 提供TRY_CONVERT()。我建议你使用它;

select try_convert(int, [value])

在其他数据库中,您可以使用正则表达式来验证数据。

【讨论】:

    【解决方案2】:

    is null 不是字符串

    CAST( (CASE WHEN [value]  is null THEN 1 ELSE [value] END) AS INT) 
    

    但最好使用 @Gordon 实际推荐的 try_convert

    【讨论】:

    • 我是这么想的,最初尝试过,但我收到消息“关键字'is'附近的语法不正确。”
    • @sql2015 立即查看
    【解决方案3】:

    由于您实际上并不是在寻找NULL--这是缺少数据。您的数据不正确,即列中的实际文本 'NULL'

    我实际上建议您将所有值更新为NULL,这样您就可以避免尝试转换数据来解决您的问题。就像这样:

    UPDATE yourtable
    SET [value] = NULL
    WHERE [value] = 'NULL'
    

    然后我还会将该列更改为真正的INT 类型以避免将来发生这种情况。但这有点超出了您的问题范围。

    当然,您不能总是更改数据类型。如果可以,那么这将是一个更持久的解决方案。

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2022-01-01
      • 2021-04-09
      相关资源
      最近更新 更多