在 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 会出错的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver中将datetime类型转换为yyyyMMddHHmmss格式
转换器无法在 windows phone 8.1 Datepicker 中将类型“system.datetime”的值转换为类型“datetime”