Teradata-将VARCHAR与十进制进行比较



我通常是TeradataSQL的新手。我需要通过组合三个表的数据来创建表。我能够成功加入其中的两个。我无法正确编写第三个表的连接条件。这是代码:

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.coldDECIMAL(10, 0)类型。我相信我已经正确地施放了它。请帮助。提前感谢。

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之后放置。

最新更新