我有一个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'
答案 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')