Sql server TSQL将varchar转换为int-numeric,比如说1,我得到一个点'';在varchar的末尾?

Sql server TSQL将varchar转换为int-numeric,比如说1,我得到一个点'';在varchar的末尾?,sql-server,tsql,int,numeric,varchar,Sql Server,Tsql,Int,Numeric,Varchar,我面临着将varchar转换为数值的问题 我有以下SQL代码 DECLARE @Test varchar --f.e. '12345' DECLARE @TestNum int ....... IF ISNUMERIC(@Test)=1 then SELECT @TestNum=@Test ...... 在调试模式下,我可以看到@Test是数字。但我有一个例外: 无法转换整型中的“12345.” 这个“.”是从哪里来的 使用cast/convert也是同样的问题。当从目标类型int更改为数

我面临着将varchar转换为数值的问题

我有以下SQL代码

DECLARE @Test varchar --f.e. '12345'
DECLARE @TestNum int
.......

IF ISNUMERIC(@Test)=1 then
 SELECT @TestNum=@Test
......
在调试模式下,我可以看到@Test是数字。但我有一个例外:

无法转换整型中的“12345.”

这个“.”是从哪里来的

使用cast/convert也是同样的问题。当从目标类型int更改为数值时,也面临此问题

Replace找不到任何内容,因此我无法消除该点('.')


有人对我有什么建议吗?

IsNumeric
对于无法转换为int的值也将返回1。请改用
try\u cast
try\u convert
。另外,在没有指定长度的情况下,不要声明varchar。
ISNUMERIC
是一个糟糕的函数;这就很好地说明了这一点。它同时返回误报(
ISNUMERIC('.')
)和误报(
ISNUMERIC(''.')
)。正如@ZoharPeled所说,使用
TRY\u CONVERT
/
TRY\u CAST
。它们是更好的函数,您可以具体说明是转换为整数、十进制还是浮点值。这些只是几个示例,但请注意,这里的所有值都可以转换为至少一种数值数据类型,但很少转换为所有数值数据类型<另一方面,code>ISNUMERIC只会给出有效的“是”或“否”答案,而且永远不会对所有答案都正确。另一个例子是,@Larnu missed-
ISNUMERIC('1d3')
将返回1…@ZoharPeled:这很奇怪,对于某些“correct”值来说是正确的--
CONVERT(FLOAT,'1d3')
是1000,即使这种格式不被接受为文本。哦,在SQL Server中使用
可以享受无穷的乐趣,它是数字和转换。。。