在DB2中将数据类型从DateTime更改为Time会产生错误

时间:2016-05-06 05:38:14

标签: sql db2

在开发数据库中成功执行了sql。

SQL用于将数据类型从DATETIME更改为TIME

ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ALTER COLUMN FROM_DT SET DATA TYPE TIME;

但在部署数据库中,它会出错

  

准备期间出现错误42601(-104)[IBM] [CLI驱动程序] [DB2 / NT] SQL0104N   在“ROM_DT SET DATA TYPE”之后发现了意外的令牌“TIME”。   预期的代币可能包括:“”。 SQLSTATE = 42601

1 个答案:

答案 0 :(得分:0)

嘿,可能是因为DB2的版本更改

我尝试过以下查询,将数据类型从DATETIME更改为TIME

ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ADD COLUMN TempFromTime TIME ;

CALL SYSPROC.ADMIN_CMD ('reorg table SCHEDULER.MV_SCHDL_APPOINTMENT');

UPDATE SCHEDULER.MV_SCHDL_APPOINTMENT SET TempFromTime =CAST(FROM_DT AS TIME);
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT DROP COLUMN FROM_DT;

ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ADD COLUMN FROM_DT TIME ;

CALL SYSPROC.ADMIN_CMD ('reorg table SCHEDULER.MV_SCHDL_APPOINTMENT');

UPDATE SCHEDULER.MV_SCHDL_APPOINTMENT SET FROM_DT=TempFromTime ;

ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT DROP COLUMN TempFromTime;

CALL SYSPROC.ADMIN_CMD ('reorg table SCHEDULER.MV_SCHDL_APPOINTMENT');

步骤:

  1. 创建临时列
  2. 使用所需列中的更新数据将数据复制到临时列。
  3. 删除现有列。
  4. 使用设计数据类型和名称添加新列。
  5. 使用临时列更新新列数据
  6. 删除临时列。
  7. 如果您能够通过查询重命名列,则可以重命名临时列,并可以跳过第4,5步和第6步。

    以下查询可用于重命名列。

    ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT CHANGE TempFromTime FROM_DT TIME;
    

    它完成了我的任务.. :)但这不是那么好的方法。

    我仍然在寻找更好的解决方案。这个解决方案也适用于我。