我读过许多关于这个问题的回答,但是没有一个答案对我最近尝试CAST
I a VARCHAR
to NUMERIC
有效
Cast(Cast(a.VARCHARFIELD as NUMERIC(20,0))as INT)
我得到的错误是:
varchar值'97264634555‘的转换溢出了int列。超过最大整数值。
不幸的是,a.VARCHARFIELD
包含像12345678999
这样的帐户,但是它也包含文本或VARCHAR
值,例如:
BALL
TWIN
12345678999
12345679000
发布于 2016-01-08 17:10:28
首先,您需要确定您的值是否为数字。这里没有ANSI标准方法,但近似只是看看它是否以一个数字开头。
其次,int
太小,所以我建议采用十进制格式。
所以像这样的东西会对你提供的数据起作用:
select (case when VARCHARFIELD between '0' and '99999999999999'
then cast(VARCHARFIELD as decimal(20, 0))
end)
在任何特定的数据库中,number
的验证都可以做得更好;给出的表单足以满足问题中提供的数据。
编辑:
在Server中,更准确的方法是:
select (case when VARCHARFIELD NOT LIKE '%[^0-9]%'
then cast(VARCHARFIELD as decimal(20, 0))
end)
https://stackoverflow.com/questions/34682355
复制相似问题