Teradata - Сравнение Varchar с десятичной

Я очень новичок в 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), Я полагаю, что произнес это правильно. Пожалуйста, помогите. Спасибо заранее.

1 ответ

Решение

Там есть некоторые плохие данные в 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_условие странное, каков тип данных s.cola? Кажется, это строка с датой yyyy-mm-dd в этом. Пытаться

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

Наконец то ORDER BY должны быть размещены после WHERE,

Другие вопросы по тегам