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')
Другие вопросы по тегам