Teradata - добавление предшествующего нуля и приведение в качестве varchar(50)
У меня есть следующий запрос:
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 u.colm = CAST(t.cold AS varchar(50))
WHERE cast(s.cola as date) between date '2017-11-06' and date '2017-11-10'
ORDER BY 3
Здесь, в последнем состоянии соединения, u.colm
имеет тип varchar(50)
а также t.cold
имеет тип decimal(10, 0)
, Я не могу бросить u.colm
как decimal(10, 0)
потому что некоторые из устаревших значений в этом столбце не являются чисто числами. Теперь, если я выполню запрос, как показано выше, он вернет пустую таблицу, потому что общие значения в u.colm
имеет предшествующий / ведущий ноль, в то время как t.cold
не имеет этого нуля. Я попробовал следующее:
1) on u.colm = '0' + cast(t.cold as varchar(50))
Это дало ошибку: [Teradata Database] [2620] The format or data contains a bad character.
2) on u.colm = right('0000000000' + cast(t.cold as varchar(50)), 50)
Это дало ошибку:[Teradata Database] [9881] Function 'TD_RIGHT' called with an invalid number or type of parameters
Вопрос, ответы и комментарии в ссылке1 предоставят больше контекста. Я довольно новичок в Teradata и не знаю, как решить эту проблему. Пожалуйста, помогите.
1 ответ
Я считаю, что Teradata поддерживает LPAD()
функция, так что вы можете использовать:
u.colm = lpad(t.cold, 10, '0')