您可以請我幫忙解決此問題(我沒有在Teradata文檔中找到它,實際上它確實有點壓倒性):我的桌子有此列-BAN DECIMAL(9,0) - ,現在我想將其更改爲 - BAN DECIMAL(15,0)COMPRESS 0.-我該怎麼做? COMPRESS約束0還是任何其他含義呢? 我希望這是可能的,我不必創建一個新表,然後從舊錶中複製數據。表格非常大 - 當我做COUNT(*)表格時,我得到這個錯誤:在計算過程中發生了2616數字溢出將列數據類型從DECIMAL(9,0)更改爲DECIMAL(15,0)
回答
ALTER TABLE的語法圖似乎不支持直接更改列的數據類型。 (Teradata SQL DDL Documentation)。 COMPRESS 0
壓縮爲零。 Teradata支持許多不同類型的壓縮。
這裏的數字溢出可能意味着您已經超出了整數的範圍。爲了使這部分工作,只需嘗試轉換爲更大的數據類型。 (你並不需要更改列的數據類型來做到這一點。)
select cast(count(*) as bigint)
from table_name;
不能使用ALTER TABLE
從DECIMAL(9,0)
數據類型更改爲DECIMAL(15,0)
,因爲它跨越存儲值所需的字節邊界桌子。對於Teradata 13.10,有關使用ALTER TABLE
更改列數據類型的更多詳細信息,請參閱Teradata手冊SQL數據定義語言詳細主題第61-65頁。
你問了三個不同的問題:
不能從
DECIMAL(9,0)
列的數據類型更改爲DECIMAL(15,0)
。最好的辦法是創建一個新列(NEW_BAN),從舊列中分配值,刪除舊列並將NEW_BAN重命名爲BAN)。COMPRESS 0
不是約束。這意味着從表中壓縮「零」的值,節省磁盤空間。您的
COUNT(*)
正在返回該錯誤,因爲該表有超過2,147,483,647行(INTEGER的最大值)。將結果轉換爲BIGINT(如Catcall所示)。
我同意,文檔可以壓倒性的。但要耐心,只關注SQL確切發佈的標題。他們寫得很好。
嗨,鮑勃!謝謝回覆。我喜歡關於添加新列和在新列中複製數據的建議。 我想知道是否可以保持相同的列順序,即我可以將新列放在舊列所在的同一位置,還是隻能位於該表的末尾? – Dantes 2012-08-13 07:23:01
- 1. MySQL DECIMAL數據類型
- 2. 無法將類型'System.Collections.Generic.IEnumerable <decimal>'隱式轉換爲'decimal'
- 3. 將MySQL Decimal數據類型類型轉換爲c#float數據類型
- 4. 將數據類型DECIMAL從CSV導入到SQL服務器
- 5. cakephp從數據類型datetime和jquery中的decimal(10,0)獲取值
- 6. DB2將轉換爲DECIMAL
- 7. 運算符' - '不能應用於類型'decimal'和'Systems.Collections.Generic.IEnumerable的操作數<decimal>
- 8. 從oracle數據庫中選擇decimal .00
- 9. MySQL DECIMAL數據類型是否強制整數的小數點?
- 10. mobileSetKeyboardType「decimal」
- 11. 從「DBNull」類型到「Decimal」類型的轉換無效
- 12. Python - pint - 我可以將默認類型設置爲Decimal嗎?
- 13. 哪種類型的數據最好在MySQL中保留'decimal'?
- 14. 如何在PHP中使用MySQL Decimal數據類型?
- 15. 如何在ASP/MVC.NET中處理Decimal(38,17)數據類型長度
- 16. postgresql中decimal和numeric數據類型有什麼區別
- 17. 爲什麼「decimal」不是有效的屬性參數類型?
- 18. 問題將列值從VARCHAR(n)轉換爲DECIMAL
- 19. 將字符串類型轉換爲int,float,decimal等類型在運行時C#
- 20. 從'DBNull'類型到'Decimal'類型的轉換無效。 - Datagridview從數據庫加載數據時發出的問題
- 21. C#將DataRow中的Double類型轉換爲XSD序列化對象中的Decimal
- 22. Mysql DECIMAL存儲
- 23. C#Regex.Match to decimal
- 24. javascript floating decimal
- 25. SQL DataType Negative Decimal
- 26. Decimal to JSON
- 27. NamedParameterJdbcTemplate jconnect decimal issue
- 28. c#sizeof decimal?
- 29. android big decimal approximation
- 30. Math.Round()decimal c#
因此基本上,你建議創建新表並將數據從現有表傳輸到新創建的表中?沒有其他辦法了? – Dantes 2012-08-10 12:30:17
您可以添加新列而不是新表,複製數據,刪除舊列並重命名新列。 (語法在DDL文檔中。)我想我已經在Teradata用戶論壇上看到了關於創建新表的討論通常更快。 – 2012-08-10 13:24:44