0

我读过很多类似标题的帖子,但没有人回答我的问题。

我有一张包含人口数据列的表格。列中的数字以逗号分隔(诚然不是最佳实践,但此时我无法控制)。我需要删除逗号才能对数据进行一些数学运算,但我收到了标题中提到的错误。下面是前几行数据,后面是应该返回数据的查询:

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

但是,该查询返回上述错误。我可以让它工作的唯一方法是用 numeric(20,0) 替换 bigint。我不应该那样做。bigint 的最大值远没有什么可接近的。没有小数。没有前导或尾随空格。这里发生了什么?

我不明白的另一件事:如果 SELECT 中包含 TOP 5,则查询的 bigint 版本返回结果,但 TOP 6 或更多错误。在另一台计算机上,它适用于 TOP 2,但 TOP 3 或更多错误。

4

1 回答 1

2

要调查问题,请执行以下操作:

select *
from Country_Region_Info cri
where isnumeric(REPLACE(cri.[population],',','')) = 0 or cri.population like '%.%'

这将找到令人反感的数值。

要忽略这些值:

SELECT [population],
       (case when isnumeric(REPLACE(cri.[population],',','')) = 1 and cri.population not like '%.%'
             then CONVERT(bigint,REPLACE(cri.[population],',',''))
        end)
FROM Country_Region_Info AS cri

您仍然可以使用其他数字格式(“7e6”),但这些可能不在您的数据中。

于 2012-12-18T15:07:35.393 回答