我的表中有一个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服务器