0

我有以下查询:

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.colmis of typevarchar(50)t.coldis of type decimal(10, 0)。我不能转换u.colmdecimal(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 很陌生,对如何解决这个问题没有太多想法。请帮忙。

4

1 回答 1

2

我相信 Teradata 支持该LPAD()功能,因此您可以使用:

u.colm = lpad(t.cold, 10, '0')
于 2017-12-22T11:37:21.177 回答