【问题标题】:Teradata date subtract issue in PERIOD columnPERIOD 列中的 Teradata 日期减去问题
【发布时间】:2017-10-23 20:52:48
【问题描述】:

我有一个 teradata 表 ABC 。我在表中有一个 PERIOD 数据类型的列(列的名称是 ef_dtm)。每当周期列的起始界限为“12/31/9999”时,我需要更新周期列的起始界限(减去 1 天)。 我正在使用以下查询。但它是在说

间隔文字无效。

你能建议我一个更新查询吗?

Nonsequenced validtime
update ABC
set ef_dtm = PERIOD(CAST(end(ef_dtm) as Date) -INTERVAL '-1' DAY , end(ef_dtm))
where begin(ef_dtm) = '12/31/9999' 

【问题讨论】:

  • 嗯,你不能有一个从 '12/31/9999' 开始的句点,因为结束必须大于开始。顺便说一句,编写 DATE 文字只有一种可靠的方法:DATE '9999-12-31'
  • 当前在数据库中的期间开始日期小于期间结束日期。期间结束日期的时间戳为 23:59。就像这样 Period start date 是 12/31/9999 00:00:00.000 , period end date 是 12/31/9999 23:59:00.0000 。我需要将期间开始日期更新为 12/30/9999 00:00:00.0000 并且期间结束日期可以保持不变。

标签: teradata


【解决方案1】:

错误是由于INTERVAL '-1' DAY部分引起的

它应该是INTERVAL -'1' DAY,即在'1'之外减去-

您的查询还有 2 个问题。

  • 无需将句点begin 转换为DATE 作为INTERVAL 算术适用于TIMESTAMP
  • DATE 文字是错误的。应该是YYYY-MM-DD;此外,它应该是TIMESTAMP,对应于周期列数据类型。

正确的查询如下。

nonsequenced validtime
UPDATE ABC
SET ef_dtm = PERIOD(begin(ef_dtm) + INTERVAL -'1' DAY, end(ef_dtm))
WHERE begin(ef_dtm) = TIMESTAMP '1999-12-31 00:00:00.000000';

nonsequenced validtime  
UPDATE ABC
SET ef_dtm = PERIOD(begin(ef_dtm) - INTERVAL '1' DAY, end(ef_dtm))
WHERE begin(ef_dtm) = TIMESTAMP '1999-12-31 00:00:00.000000';

演示

创建表

CREATE TABLE ABC ( ef_dtm period(timestamp(6)) AS validtime ) NO PRIMARY INDEX;

插入数据:

INSERT INTO abc(period (TIMESTAMP '1999-12-31 00:00:00.000000', TIMESTAMP '1999-12-31 23:59:00.000000'));

选择后

ef_dtm
------------------------------------------------------------
('1999-12-31 00:00:00.000000', '1999-12-31 23:59:00.000000')

更新数据:

nonsequenced validtime
UPDATE ABC
SET ef_dtm = PERIOD(begin(ef_dtm) + INTERVAL -'1' DAY, end(ef_dtm))
WHERE begin(ef_dtm) = TIMESTAMP '1999-12-31 00:00:00.000000';

SELECT之后

ef_dtm
------------------------------------------------------------
('1999-12-30 00:00:00.000000', '1999-12-31 23:59:00.000000')

【讨论】:

  • 非常感谢您的详细解释!它工作正常!
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 2021-08-23
  • 2017-06-16
  • 2021-10-04
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多