如何在sql中编写这个连接条件?

xmjla07d  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(365)

我有第x列可以容纳20位或22位数字,第y列可以容纳22位数字。
如果列x的数字是20位长,我想在列y中加入第二位不等于0的数字。else(当列号为22位时),我想将列号与列号正常连接。
怎么做?
例如,
如果x列的数字为00000000000579701673(20位)和0000000000000 957821317(22位),y列的数字为9900000000000579701673(22位)和0000000000000 957821317(22位),我想将第x列的00000000000579701673(20位)与第y列的9900000000000579701673(22位)和第x列的0000000000000 957821317(22位)与第y列的0000000000000 957821317(22位)合并
如果列x是20位,那么前缀是从“01”到“99”的任意位置,我使用的是teradata sql assist

y4ekin9u

y4ekin9u1#

根据你的逻辑,你需要预先准备好 '99' 如果字符串只有20个字符(与june7的答案类似,但使用标准sql/teradata语法):

join ...
on case when char_length(column_x) = 20 then '99' else '' end || column_x = column_y

编辑:
根据您的注解,如果x有20位数字,则必须与以“01”开头的y列或“99”列连接这可能是您想要的:

on right(column_x, 20)= right(column_y, 20)
and (char_length(column_x) = 22 
     or substr(column_y, 1, 2) <> '00')
zc0qhyus

zc0qhyus2#

以下是我认为您要查找的内容,我添加了关于两个连接条件的注解,这两个条件解释了我的理解。如果我误解了什么,请告诉我。我从未使用过teradatasql,所以您可能需要将len的用法改为length。

select * 
from x
inner join y
-- if X is 22 characters long, join with y normally
ON (LEN(x.id) = 22 AND x.id = y.id)
-- if x is 20 characters long, join with y if the first two digits are not 00
   OR (LEN(x.id) = 20 AND LEFT(y.id, 2) <> '00')

相关问题