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