首先,让我说明我已经阅读过各种类似的帖子,并且无法确定其他海报有此错误信息的问题与我遇到的情况之间的相似之处,遇到过。也许我没有正确地搜索,但这是场景。我试图在转换为数字值时在表中搜索小于70的值。有时值可以用逗号(即3,080等)存储,所以我有一个替换语句来删除逗号。以下查询中的obsValue
列是varchar(2000)
,我猜这可能与它有关。我的初步查询工作:将varchar转换为数据类型的算术溢出错误
Select name, obsValue
From database.dbo.table
Where name in ('LDL')
and isnumeric(obsvalue) = 1
and cast(replace(obsvalue,',','') as decimal(18)) < 70
此带回预期值,但它不是我想要寻找的唯一name
。其他例子包括('LDL(CALC)')
。使用UNION
语句将允许我一起查询联合查询,但不幸的是,我不控制应用程序代码,这不是一个选项。我可以用一个IN
条款,所以最终的查询将是这样的,当我在寻找各种name
值的唯一选择:
Select name, obsValue
From database.dbo.table
Where name in ('LDL', 'LDL(CALC)')
and isnumeric(obsvalue) = 1
and cast(replace(obsvalue,',','') as decimal(18)) < 70
不幸的是做这种方式是从哪里获得的错误信息。我很抱歉,如果这已经在其他地方得到解答。请链接,我将在信贷到期时给予贷款。
你会得到什么错误?另外,为了调试,尝试将其分解成多个部分来查看哪个函数导致错误。测试仅运行in()函数,isnumeric()和cast()。可能只有一部分查询产生错误。 – Beth 2012-01-30 16:45:38
也许小数点?,如果您将演员视为“DECIMAL(36,6)”或类似的东西,会发生什么? – Lamak 2012-01-30 16:45:48
@beth这是问题的标题,算术溢出错误将varchar转换为数据类型数字。刚刚看到你的编辑,这个问题不在任何一个函数中,问题是当我尝试在'IN'子句中包含多个值时。防爆。 IN('LDL')'起作用,'IN('LDL(CALC)')起作用,IN('LDL','LDL(CALC)')失效。 @Lamak'DECIMAL(36,6)'会导致相同的错误 – akousmata 2012-01-30 16:47:37