CAST和IsNumeric

为什么以下查询返回“将数据类型varchar转换为bigint时出错”?IsNumeric不使CAST安全吗?我已经尝试了转换中的每个数值数据类型,并得到相同的“错误转换...”错误。我不认为结果数的大小有问题,因为溢出是一个不同的错误。


有趣的是,在Management Studio中,结果实际上在错误再次出现之前一瞬间显示在结果窗格中。


SELECT CAST(myVarcharColumn AS bigint)  

FROM myTable  

WHERE IsNumeric(myVarcharColumn) = 1 AND myVarcharColumn IS NOT NULL  

GROUP BY myVarcharColumn

有什么想法吗?


子衿沉夜
浏览 601回答 3
3回答

慕尼黑的夜晚无繁华

如果varchar值可以转换为ANY数字类型,则IsNumeric返回1。这包括int,bigint,十进制,数字,实数和浮点数。科学计数法可能会给您造成问题。例如:Declare @Temp Table(Data VarChar(20))Insert Into @Temp Values(NULL)Insert Into @Temp Values('1')Insert Into @Temp Values('1e4')Insert Into @Temp Values('Not a number')Select Cast(Data as bigint)From   @TempWhere  IsNumeric(Data) = 1 And Data Is Not NULL您可以使用IsNumeric技巧,使具有科学计数法的数字返回0。您可以应用类似的技巧来防止十进制值。IsNumeric(YourColumn +'e0')IsNumeric(YourColumn +'.0e0')试试看。SELECT CAST(myVarcharColumn AS bigint)FROM myTableWHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULLGROUP BY myVarcharColumn
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server