2014-01-30 159 views
2

在Oracle 10G中創建的數據庫中有一個表,它包含一個'VARCHAR'類型的列,並將日期保存爲字符串格式 - > 'DD-MON-YYYY' 如:'12 -aug-2008' 現在我想從這個VARCHAR列的數據類型更改爲DATE但是當我藉此在此查詢 - >在SQL/ORACLE中將列的數據類型「varchar」更改爲「DATE」

ALTER TABLE sales_order 
MODIFY COLUMN delivery_date DATE; 

。我得到以下錯誤

ORA-00905:缺少關鍵字

我也曾嘗試:

ALTER TABLE sales_order 
ALTER COLUMN delivery_date DATE; 

我得到了錯誤:

ORA-01735:無效的ALTER TABLE選項

然而,當我嘗試添加一個新柱DATE數據類型,它工作正常。 例如:

ALTER TABLE sales_order 
ADD delivery DATE; 

所以,任何人都可以建議我的方式來改變數據類型,但不刪除列及其數據。

回答

2

這是第一個,有輕微的修改:

ALTER TABLE sales_order MODIFY (delivery_date DATE); 

但我不敢肯定,會爲那些特定數據類型的工作,它也可以不依賴於當前的數據。

您可能會發現有必要在這種情況下,以:

  • 創建日期類型的新列X
  • 根據舊列填充X(可能需要幾次數據修改才能正常工作)。
  • 刪除舊欄。
  • 將舊的列名重命名爲X
+1

關鍵字'column'是可選的,那麼括號是也。 'ALTER TABLE sales_order的MODIFY DELIVERY_DATE DATE'是正確的語法爲好。但是從'varchar'改爲'date'將導致'ORA-01439:列修改必須是空的改變datatype' –

+1

@ a_horse_with_no_name我同意你的說法,這意味着我必須遵循paxdiablo建議的步驟。我還計算出來,在它們是不相容的,或者如果我們正在減少精度數據類型的轉換(例如:浮子INT),它給錯誤'柱必須empty.' –

0

修改列然後語法是: -

ALTER TABLE表名修改列名的數據類型;

但是當你修改列數據類型列必須是空

0

謝謝你的提示!這對我來說。

的alter table table_name的 阿爾特列列名的數據類型 GO

我也被需要從一個VARCHAR更改爲日期。我正在SQL 2008 R2中工作。我發現,如果我將日期作爲char或varchar引入,然後將類型更改爲日期或日期時間,則可以更輕鬆地捕獲時間/日期問題。

該語句將失敗,如果您的數據的任何壞的日期。 (我打破了日期向下段找到錯誤的日期,所以我可以糾正,然後我可以改變列類型。)

0

雖然它的一個很老的問題,我會在這裏把我的解決方案爲人們尋求一解決方案:

這裏是我的解決方案,它完美的作品。

ALTER TABLE `sales_order` CHANGE `delivery_date` `delivery_date` DATE; 

謝謝

相關問題