Teradata 日期减去 PERIOD 列中的问题

Teradata date subtract issue in PERIOD column

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

INVALID Interval Literal.

你能建议我更新查询吗?

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' 

错误是因为部分INTERVAL '-1' DAY

它应该是 INTERVAL -'1' DAY 即在 '1'

之外减去 -

您的查询还有 2 个问题。

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

正确查询如下

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';

DEMO

创建Table:

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'));

select

之后
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')