![]() |
1
55
如果varchar值可以转换为任何数字类型,则isnumeric返回1。这包括int、bigint、decimal、numeric、real&float。 科学记数法可能会给你带来问题。例如:
有一个技巧可以与isNumeric一起使用,以便它为带有科学记数法的数字返回0。您可以应用类似的技巧来防止十进制值。 IsNumeric(您的列+'e0') IsNumeric(您的列+'.0e0') 试试看。
|
![]() |
2
7
背景:
我使用第三方数据库,它不断地从其他第三方供应商那里接收新数据。
如果我需要查询给定的十进制范围(如果适用,可以说-1.4到3.6),我的选项是有限的。
解决方案:
输出:
下面的屏幕截图已格式化并被缩减以适应stackoverflow。
研究:
在每个查询的旁边是结果。
|
![]() |
3
4
最好的解决方案是停止在varchar列中存储整数。显然,存在一个数据问题,即数据可以解释为数字,但不能强制转换为数字。您需要找到问题所在的记录,并在数据可以且应该修复的情况下修复它们。根据您要存储的内容以及它是varchar的原因,您可能需要修复查询而不是数据。但是,如果您首先找到了正在刷新当前查询的记录,这也将更容易做到。 如何做到这一点是个问题。使用charindex搜索数据中的小数点比较容易,以查看是否有小数(除了.0之外,它将转换)。您还可以查找包含e或$的任何记录,或者根据已经给出的源代码,可以用数字形式插入的任何其他字符。如果您没有很多记录,对数据进行快速的视觉扫描可能会找到它,特别是如果您首先对该字段进行排序。 有时,当我一直在寻找破坏查询的坏数据时,我把数据放入一个临时表,然后尝试成批地处理(使用插值),直到找到它爆炸的那个。从前1000条开始(不要忘记使用ORDER BY,否则删除好的记录时不会得到相同的结果,如果有数百万条记录以较大的数字开始,1000条只是一个最佳猜测)。如果通过,删除1000条记录并选择下一批。一旦失败,选择一个较小的批次。一旦你找到一个容易被肉眼扫描的数字,你就会发现问题所在。当我有数以百万计的记录和一个wierd错误时,我能够相当快地找到问题记录,我尝试过的所有查询(基本上都是关于什么可能是错误的猜测)都没有发现问题。 |
![]() |
4
3
试试看你是否仍然有错误…
|
![]() |
5
2
IsNumeric只是…愚蠢的。你根本不应该用它。 以下所有情况返回1:
对于任何整数类型,请使用:
唯一好的解决方案是不要使用isNumeric。 |
![]() |
6
1
尝试将其包装在一个案例中:
|
![]() |
7
1
根据 BOL 当输入表达式的计算结果为有效的数值数据类型时,IsNumeric返回1;否则返回0。 有效的数字数据类型包括:
因此,正如其他人指出的,您将拥有一些将通过的数据 等号的 对bigint进行测试但失败 |
![]() |
8
1
我有同样的问题,我在2008年的SQL中提出了标量函数im。
如果你在2012年,你可以使用
|
![]() |
9
0
我在2014年的MSSQL中也遇到过同样的问题,是由逗号而不是句号触发的: IsNumeric(‘9090,23’)给出1; CAST(“9090,23”作为浮动)失败 我把''替换为''。 |
![]() |
10
0
在这种情况下,有DAX函数(ISeror或iError)可以提供帮助,但我们的SQL Server 2008 R2上没有这些函数。看起来像是一些用于SQL Server的附加分析包。 |
![]() |
11
-1
我看到了这篇可能会有所帮助的博客文章。我以前没有遇到过这个问题,也不确定它是否对您有帮助: http://dotmad.blogspot.com/2007/02/cannot-call-methods-on-bigint-error.html |
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 9 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |