我已閱讀了大量類似標題的帖子,但沒有回答我的問題。將數據類型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實例中工作得很好:-( –
我幾乎可以保證你在人口列中至少有一行數據有問題,這是你將數字存儲爲字符串所付出的代價,你說它超出了你的控制範圍,但是請回擊這個可怕的設計決定。 –