我对Teradata
和SQL
一般都不熟悉。我需要通过组合来自三个表的数据来创建表。我能够成功加入其中两个。我无法正确编写第三个表的连接条件。这是代码:
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.colm
的类型为VARCHAR(50)
,而t.cold
的类型为DECIMAL(10, 0)
。我相信我已经正确地投入了它。请帮忙。谢谢。
答案 0 :(得分:3)
u.colm
中有一些不良数据。
根据您的Teradata版本,您可以使用
进行检查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 BY
应放在WHERE
之后。