我已阅读了大量类似标题的帖子,但没有回答我的问题。将数据类型varchar转换为bigint时出错(使用REPLACE)
我有一张人口数据列表。列中的数字用逗号分隔(当然,这不是最佳做法,但在这一点上超出了我的控制范围)。我需要删除逗号以便对数据进行一些数学运算,但是我收到了标题中提到的错误。以下是应该返回数据的查询后面的前几行数据:
POPULATION (No column name)
7,859,000 7859000
575,660 575660
818,000 818000
5,254,000 5254000
73,751,000 73751000
38,610,000 38610000
SELECT [population],
CONVERT(bigint,REPLACE(cri.[population],',',''))
FROM Country_Region_Info AS cri
但是,该查询返回上述错误。唯一能让它工作的方法是用数字(20,0)替换bigint。我不应该那样做。没有什么是远程接近bigint的最大值。没有小数。没有前导或尾随空格。这里发生了什么?
我不明白的另一件事:查询的bigint版本返回结果如果TOP 5包含在SELECT中,但是在TOP 6或更多的错误。在不同的计算机上,它与TOP 2一起使用,但在TOP 3或更高版本上出现错误。
这不会返回什么? '从Country_Region_Info中选择顶部5 *,其中人口像'%[^ 0-9,]%'' –
不确定这里发生了什么 - 我无法重现这一点,在我的SQL Server 2008 R2实例中工作得很好:-( –
我几乎可以保证你在人口列中至少有一行数据有问题,这是你将数字存储为字符串所付出的代价,你说它超出了你的控制范围,但是请回击这个可怕的设计决定。 –