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

Posted

技术标签:

【中文标题】在 DB2 中将数据类型从 DateTime 更改为 Time 会出错【英文标题】:Changing datatype from DateTime to Time in DB2 gives error 【发布时间】:2016-05-06 05:38:13 【问题描述】:

以下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】:

嘿,可能是因为 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');

步骤:

    创建临时列 使用所需列中的更新数据将数据复制到临时列。 删除现有列。 添加带有设计数据类型和名称的新列。 使用临时列更新新列数据 删除临时列。

如果您能够通过查询重命名列,则重命名临时列并且可以跳过第 4,5 和第 6 步。

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

ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT CHANGE TempFromTime FROM_DT TIME;

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

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

【讨论】:

...您可能只需要在最后一个命令之后进行重组。不过,我想我担心时间可能会与约会分开。

以上是关于在 DB2 中将数据类型从 DateTime 更改为 Time 会出错的主要内容,如果未能解决你的问题,请参考以下文章

在 SSIS 中将 ODBC DB2 源转换为平面文件错误

在 DB2 中将 CHAR 插入 DATE

sqlserver中将datetime类型转换为yyyyMMddHHmmss格式

如何在 DB2 中将 varchar 转换为时间戳

转换器无法在 windows phone 8.1 Datepicker 中将类型“system.datetime”的值转换为类型“datetime”

在 Select 语句中将 DateTime 转换为 Unix 时间戳?