2017-12-21 19 views
0

나는 일반적으로 TeradataSQL을 매우 새로 도입했습니다. 세 테이블의 데이터를 결합하여 테이블을 만들어야합니다. 나는 그들 중 2 명과 성공적으로 합류 할 수 있었다. 세 번째 테이블에 대한 조인 조건을 올바르게 작성할 수 없습니다.Teradata - Varchar와 십진수 비교

select s.cola, s.colb, 
t.colc, t.cold, 
u.cole, u.colf, u.colg, u.colh, u.coli, u.colj, u.colk, u.coll 
from table1 s 
inner join table2 t 
on s.colb = t.colc 
inner join table3 u 
on t.cold = cast(u.colm as decimal) 
order by 3 
where substr(cast(s.cola as varchar(10)),6,2) = 11 and substr(cast(s.cola as varchar(10)),1,4) = 2017 and substr(cast(s.cola as varchar(10)),9,2) between 06 and 10 

내가 점점 오전 오류는 다음과 같습니다 :

[Teradata Database] [2620] The format or data contains a bad character.

나는 문제가 줄 생각 : on t.cold = cast(u.colm as decimal) 여기에 코드입니다. u.colmVARCHAR(50)이고 t.coldDECIMAL(10, 0)입니다. 나는 그것을 올바르게 캐스팅했다고 믿습니다. 제발 도와 줘. 고맙습니다.

답변

2

u.colm에 잘못된 데이터가 있습니다.

당신이

WHERE u.colm > '' AND TRYCAST(u.colm as decimal(10,0)) ISNULL 

또는

WHERE u.colm > '' AND TO_NUMBER(u.colm) IS NULL 

또한 조인 조건에서 사람들을 사용할 수 있습니다, 예를 들어,를 사용하여 확인 할 수 테라 데이타 자료에 따라

on t.cold = trycast(u.colm as decimal(10,0)) 

기본값이 (5,0)이므로 소수점의 정밀도를 추가하는 것을 잊지 마십시오.

WHERE_condition이 이상합니다. s.cola의 데이터 유형은 무엇입니까? 날짜가 yyyy-mm-dd 인 문자열로 보입니다.

WHERE trycast(s.cola as date) between date '2017-11-06' and date '2017-11-10' 

마지막으로 ORDER BYWHERE 후 배치해야보십시오.

+0

답장을 보내 주셔서 감사합니다. 'u.colm'에는 알파벳과 숫자가 모두 포함 된 값이 있습니다. 나는't.cold'를'varchar (50)'으로 캐스팅하여 그것을 고쳤습니다. 's.cola '는 날짜이지만 위의 행은 작동하지 않습니다. 주문에 대한 정정에 감사드립니다. –

+0

'trycast' 대신'cast'를 시도했을 때'where' 조건의 날짜 문제가 해결되었습니다. –