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
时,中的日期问题得到了解决。