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
,