Sql Teradata-将Varchar与十进制进行比较

Sql Teradata-将Varchar与十进制进行比较,sql,inner-join,teradata,Sql,Inner Join,Teradata,一般来说,我对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

一般来说,我对
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]格式或数据包含错误字符。


我认为问题在于这行:
on t.cold=cast(u.colm为十进制)
u.colm
类型为
VARCHAR(50)
,而
t.cold
类型为
DECIMAL(10,0)
。我相信我铸造得很好。请帮助。提前谢谢。

u.colm中有一些错误数据

根据Teradata版本的不同,您可以使用

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

您也可以在连接条件中使用这些,例如

on t.cold = trycast(u.colm as decimal(10,0))
不要忘记添加小数点的精度,因为它默认为
(5,0)

您的WHERE_条件很奇怪,
s.cola
的数据类型是什么? 似乎是一个带有日期的字符串。试一试

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

最后,
orderby
应该放在
的WHERE
后面

u.colm
中有一些坏数据

根据Teradata版本的不同,您可以使用

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

您也可以在连接条件中使用这些,例如

on t.cold = trycast(u.colm as decimal(10,0))
不要忘记添加小数点的精度,因为它默认为
(5,0)

您的WHERE_条件很奇怪,
s.cola
的数据类型是什么? 似乎是一个带有日期的字符串。试一试

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

最后,
orderby
应该放在
的WHERE
后面

谢谢你的回答。原来
u.colm
有几个值,其中包含字母和数字。我通过将
t.cold
转换为
varchar(50)
来修复它。s.cola的
s.cola
是date,但上面的行不起作用。感谢您对
order by
的更正。中的日期问题在我尝试
cast
而不是
trycast
时得到了解决。感谢您的回答。原来
u.colm
有几个值,其中包含字母和数字。我通过将
t.cold
转换为
varchar(50)
来修复它。s.cola的
s.cola
是date,但上面的行不起作用。感谢您对
order by
的更正。当我尝试
cast
而不是
trycast
时,中的日期问题得到了解决。