2017-10-23 1 views
1

테라 데이타 테이블 ABC가 있습니다. 나는 PERIOD 데이터 형식 (열의 이름은 ef_dtm 임) 인 열을 테이블에 가지고 있습니다. 기간 열의 시작 경계가 '12/31/9999 '일 때마다 기간 열의 시작 경계를 업데이트해야합니다 (1 일 뺍니다). 아래 쿼리를 사용하고 있습니다. 하지만 그것은 말하고있다PERIOD 열의 Teradata 날짜 빼기 문제

INVALID Interval Literal.

업데이트 쿼리를 제안 해 주시겠습니까? 그것은 당신의 쿼리가 2 더 많은 문제가있는 '1'

외부 INTERVAL -'1' DAY 즉 마이너스 -해야

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

SELECT 후에는 끝이 시작보다 커야하기 때문에 기간이 '/ 9천9백99분의 31 '12에서 시작 가질 수 없습니다. Btw, DATE 리터럴을 쓰는 신뢰할 수있는 방법은 단 하나뿐입니다. 현재 데이터베이스 기간 시작 날짜에있는 'DATE'9999-12-31'' – dnoeth

+0

이 기말 종료 날짜보다 작습니다.기간 종료일의 타임 스탬프는 23:59입니다. 이 기간 시작 날짜와 같은 날짜는 12/31/9999 00 : 00 : 00.000이고 기간 종료 날짜는 12/31/9999 23 : 59 : 00.0000입니다. 필요한 것은 기간 시작 날짜를 12/30/9999 00 : 00 : 00.0000으로 갱신하고 기간 종료 날짜는 그대로 유지할 수 있습니다. –

답변

1

오류 때문에 일부 INTERVAL '-1' DAY

이다.

  • TIMESTAMP
  • DATE 리터럴에 DATEINTERVAL 같은 연산 작업에 기간 begin 캐스팅 할 필요가 잘못이다. YYYY-MM-DD이어야합니다. 또한 period 열 데이터 유형에 해당하는 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'; 

DEMO

만들기 표 :

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

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

자세한 설명을 해주셔서 감사합니다! 잘 작동합니다! –