PERIOD列

时间:2017-10-23 08:27:41

标签: teradata

我有一个teradata表ABC。我在表中有一列PERIOD数据类型(列的名称是ef_dtm)。我需要更新句点列的起始界限(减去1天),只要句点列的开始界限为'12 / 31/9999'。 我使用以下查询。但它是在说

  

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' 

1 个答案:

答案 0 :(得分:1)

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

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

之外减去'1'

您的查询还有两个问题。

  • 无需将句点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')