我已经阅读了大量有类似标题的帖子,但没有回答我的问题。
我有一张包含一列人口数据的表格。列中的数字是逗号分隔的(当然不是最佳实践,但此时我无法控制)。我需要删除逗号才能对数据进行一些数学运算,但是我收到了标题中提到的错误。下面是应该返回数据的查询后面的前几行数据:
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的最大值。没有小数。没有前导或尾随空格。这是怎么回事?
我不明白的另一件事:如果TOP中包含TOP 5,则查询的bigint版本会返回结果,但TOP 6或更多的错误。在另一台计算机上,它适用于TOP 2,但在TOP 3或更高版本上有错误。
答案 0 :(得分: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”),但这些可能不在您的数据中。