【问题标题】:SET Date in Column A of type TIMESTAMP in DB2在 DB2 中的 TIMESTAMP 类型的列 A 中设置日期
【发布时间】:2017-01-27 16:17:36
【问题描述】:

我正在运行以下 DB2 查询:

UPDATE Table
SET DATE(COLA) = '2017-03-31'
WHERE DATE(COLA) = '2017-03-29'; 

COLA 是 TIMESTAMP 类型。

样本值:

COLA:
2017-03-29-00.00.00.000000

预期更新值:

COLA:
2017-03-31-00.00.00.000000

当我在上面的查询中运行时,我得到了

SQL 代码 SQLCODE = -104,ERROR: ILLEGAL SYMBOL "(". Some SYMBOLS that 可能是合法的:= .

谁能帮我解决这个问题?

非常感谢!

【问题讨论】:

  • 函数(例如 DATE())不能位于分配的左侧。好吧,反正不是在 SQL 中。

标签: sql db2


【解决方案1】:

我相信您的问题出在SET 部分。试试这个:

UPDATE Table
SET COLA = DATE('2017-03-31') -- TIMESTAMP ('2017-03-31-00.00.00.000000') 
WHERE DATE(COLA) = '2017-03-29'; 

您想要更新列,而不是更新对列执行的函数的结果。

【讨论】:

  • 您可以简单地将DATE 值分配给TIMESTAMP 列,时间部分将默认为全零:...SET colA = '2017-03-29'...
  • 非常感谢!我会试试看。
  • 更新表 SET COLA = TIMESTAMP ('2017-03-31-00.00.00.000000') WHERE DATE(COLA) = '2017-03-29';它工作正常。谢谢!
  • 另一种情况:如果 COLA 不允许保存重复值,您能否建议仅将时间戳的 DATE 部分从“2017-03-29”更新为“2017-03-31”的方法在单个查询中,而不是为每一行运行查询。示例:当前表值:COLA 2017-03-29-00.00.00.100000 2017-03-29-00.00.00.200000 2017-03-29-00.00.00.300000 2017-03-29-00.00.00.400000 2017-03-009-009 .00.500000 预期表值:2017-03-31-00.00.00.100000 2017-03-31-00.00.00.200000 2017-03-31-00.00.00.300000 2017-03-31-00.00.0.00.40003-00000002-002 00.500000 非常感谢!
  • Manas - 如果这有助于您考虑将其标记为正确答案(摇杆下方的复选框)。如果您还有其他问题,最好将其作为新问题发布。
【解决方案2】:

去做吧:

UPDATE Table
SET COLA = '2017-03-31-00.00.00.000000'
WHERE DATE(COLA) = '2017-03-29'; 

【讨论】:

  • 非常感谢!我会试试看。
  • 更新表集 COLA = '2017-03-31-00.00.00.000000' WHERE DATE(COLA) = '2017-03-29';它工作正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2019-10-03
  • 1970-01-01
  • 2014-09-24
  • 2015-12-15
  • 2019-01-27
相关资源
最近更新 更多