【问题标题】:Changing the data type "varchar'' of a column to "DATE" in SQL/ORACLE在 SQL/ORACLE 中将列的数据类型“varchar”更改为“DATE”
【发布时间】:2014-02-23 09:53:24
【问题描述】:

我在 oracle 10G 中创建的数据库中有一个表。它包含一个“VARCHAR”类型的列,并将日期存储为这种格式的字符串->“dd-mon-yyyy”,例如:“12-aug-2008”。现在我想将此列的数据类型从 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;

那么,谁能建议我在不删除列及其数据的情况下更改数据类型的方法。

【问题讨论】:

    标签: sql date oracle10g database


    【解决方案1】:

    是第一个,稍作修改:

    ALTER TABLE sales_order MODIFY (delivery_date DATE);
    

    但我不确定 确定这是否适用于那些特定的数据类型,并且根据当前数据,它也可能无法正常工作。

    在这种情况下,您可能会发现有必要:

    • 创建一个日期类型的新列X
    • 根据旧列填充X(可能需要多次数据修复才能工作)。
    • 删除旧列。
    • X 重命名为旧列名。

    【讨论】:

    • 关键字column 是可选的,然后括号也是。 ALTER TABLE sales_order MODIFY delivery_date DATE 也是正确的语法。但是从varchar 更改为date 将导致ORA-01439: column to be modified must be empty to change datatype
    • @a_horse_with_no_name 我同意你的观点,这意味着我必须遵循 paxdiablo 建议的步骤。我还发现在转换不兼容的数据类型或降低精度(例如:float to int)时,会出现错误column must be empty.
    【解决方案2】:

    修改一列然后语法是:-

    alter table table_name modify column_name datatype;

    但是当你修改列数据类型时列必须为空

    【讨论】:

      【解决方案3】:

      感谢您的提示!这是给我的。

      更改表 Table_Name 更改列 Column_Name 数据类型 去吧

      我也需要从 VARCHAR 更改为日期。我正在使用 SQL 2008 R2。我发现如果我将日期作为 char 或 varchar 引入,然后将类型更改为 date 或 datetime,我可以更轻松地发现时间/日期问题。

      如果您的数据有任何错误日期,此声明将失效。 (我将日期分解为多个部分以查找错误日期,以便进行更正,然后更改列类型。)

      【讨论】:

        【解决方案4】:

        虽然这是一个相当老的问题,但我会将我的解决方案放在这里,供寻求解决方案的人使用:

        这是我的解决方案,效果很好。

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

        谢谢

        【讨论】:

          【解决方案5】:

          或者,您可以创建一个新列,其中数据类型为 DATE。然后将 varchar 中的数据作为日期传递。然后删除初始列,最后将新列重命名为最初的内容...下面的代码。

          ALTER TABLE my_table ADD (new_col DATE);
          UPDATE my_table SET new_col=TO_DATE(old_col,'MM/DD/YYYY');
          ALTER TABLE my_table DROP (old_col);
          ALTER TABLE my_table RENAME COLUMN new_col TO old_col;
          

          【讨论】:

            【解决方案6】:

            alter table employee add (DOB varchar(10));
            如果添加数据类型为 varchar 的列,并且要修改 DOB 的数据类型,则可以使用此命令 -> 更改表员工修改(出生日期); 现在表格已修改。

            【讨论】:

            • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
            猜你喜欢
            • 2018-06-03
            • 1970-01-01
            • 1970-01-01
            • 2017-09-07
            • 2023-04-07
            • 1970-01-01
            • 1970-01-01
            • 2019-08-17
            • 1970-01-01
            相关资源
            最近更新 更多