为了账号安全,请及时绑定邮箱和手机立即绑定

CAST和IsNumeric

CAST和IsNumeric

子衿沉夜 2019-11-19 09:55:43
为什么以下查询返回“将数据类型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有什么想法吗?
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果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   @Temp

Where  IsNumeric(Data) = 1 And Data Is Not NULL

您可以使用IsNumeric技巧,使具有科学计数法的数字返回0。您可以应用类似的技巧来防止十进制值。


IsNumeric(YourColumn +'e0')


IsNumeric(YourColumn +'.0e0')


试试看。


SELECT CAST(myVarcharColumn AS bigint)

FROM myTable

WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL

GROUP BY myVarcharColumn


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 570 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信