当前位置: 首页 > 面试题库 >

SQL Server 2005将VARCHAR转换为INT,但默认使用无效类型

汪泓
2023-03-14
问题内容

我的表中有一个varchar(100)列,其中包含整数(作为字符串)和非整数字符串的混合。例如

| dimension varchar(100) |
| '5'                    |
| '17'                   |
| '3'                    |
| 'Pyramids'             |
| 'Western Bypass'       |
| '15'                   |

如何写一个表达式,例如将所有有效整数的值求和?如果我要尝试:

-- should return 5 + 17 + 3 + 15 = 40
SELECT
    SUM( CONVERT( INT, dimension ) )
FROM
    mytable

我会收到一个Conversion failed when converting the varchar value 'Pyramids' to data type int.错误。

与该ISNULL()函数类似,是否可以在表达式中使用一个测试,如果该字段不是数字,该测试允许我指定默认值?


问题答案:

试试这个:

SELECT
    SUM(CASE ISNUMERIC(dimension) 
           WHEN 1 THEN CONVERT( INT, dimension ) 
           ELSE 0  
        END)
FROM
    mytable

CASE应检查是否dimension为数字-如果是,则返回该值。如果不是数字,则返回默认值(此处:0)

是否需要经常查询,也可以向表中添加一个持久化的计算列,该列封装了该计算并存储了值。这样,在进行求和等操作时,您不必总是重新计算值:

ALTER TABLE mytable
  ADD NumericValue AS CASE ISNUMERIC(dimension) 
      WHEN 1 THEN CONVERT( INT, dimension ) ELSE 0 END PERSISTED

现在,您可以SELECT dimension, numericvalue FROM mytable获取两个值,而不必执行任何计算。



 类似资料:
  • 问题内容: 我在下面的查询中,需要转换为 架构图 我尝试了什么 但它们不起作用。请提出建议。 问题答案: 您将需要或作为数据类型,没有可以将数据强制转换/转换为以下数据的数据类型: 请参阅下面的SQL(实际上)在SQL Fiddle中 : 除了您试图转换为不正确的数据类型外,您所使用的语法也不正确。该函数使用以下列或值: 要么 您的原始查询的语法向后。

  • 问题内容: 我创建了一个过程并收到了此消息 将varchar值’%’转换为数据类型int时,转换失败。 我不知道这可能是什么,但是当我将过程更改为这样时: 似乎工作正常。我是SQL的新手,所以可以得到任何帮助,也许有更好的方法来做我想做的事情? 问题答案: 这是在子句中: 是一个整数。因此,您需要将其转换为字符串: 为什么要使用称为的列是可疑的。也许您只想要:

  • 问题内容: 我正在尝试使用存储过程基于varchar类型的“名称”列的输入值来返回“项目”表的“ ItemId”列值,但是每当我将任何值传递给存储过程时,它都会向我返回错误: 将数据类型varchar转换为int时出错。 这就是我所说的: 问题答案: 您必须匹配参数:RETURN不会填充OUTPUT参数:您对@itemid的赋值可以做到这一点。 另外,您存储的过程太复杂了。对于从存储的proc返回

  • 问题内容: 尝试运行SQL查询时出现此错误… 将varchar值’Id’转换为数据类型int时转换失败 请帮我 :( 问题答案: 在您的情况下,请确保一列是类型,另一列是类型。 由于优先级高于,因此列将隐式转换为 因此,将列明确转换为varchar。 我已经考虑了如果不是的类型,然后转换为

  • 问题内容: 我当前的数据 是 我已经尝试了所有四个查询,但都没有工作。(参考) 全部抛出语法错误,如下所示: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’)AS INT FROM PRODUCT LIMIT 0,30’附近使用正确的语法 您的SQL语法有误;在第1行的“ INTEGER)FROM PRODUCT LIMIT 0,30”附近检查与您的MySQL服务器