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

ただし、そのクエリは上記のエラーを返します。それを機能させる唯一の方法は、bigintをnumeric(20,0)に置き換えることです。私はそれをする必要はありません。bigintの最大値にリモートで近いものはありません。小数はありません。先頭または末尾のスペースはありません。ここで何が起こっているのですか?

私が理解していないもう1つのことは、クエリのbigintバージョンは、TOP 5がSELECTに含まれている場合は結果を返しますが、TOP6以上ではエラーを返します。別のコンピューターではTOP2で動作しますが、TOP3以上でエラーが発生します。

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 に答える