如何在 sql 中编写此连接条件?
How write this join criteria in sql?
我有 column_x 包含 20 位或 22 位数字,column_Y 包含 22 位数字。
如果 column_x 的号码是 20 位长,我想加入 column_Y,只有 column_Y 中第二位不等于 0 的号码。
否则(当 column_x 号码长 22 位时),我想正常加入 column_x 和 column_Y 的号码。
如何操作?
例如,
如果X列有数字00000000000579701673(20位)和00000000000000000957821317(22位数字),并且Y列具有数字99000000000000000579701673(22数字)(22数字)和0000000000000000000000000000000000000000000000007777782位(I I INJITSITITSITITS)(I I IDIGITSITITS)(I I I IGIANIT)来自 column_x 和来自 column_Y 的 99000000000000579701673(22 位数字)和来自 column_Y 的 0000000000000957821317(22 位数字)和来自 column_Y
的 0000000000000957821317(22 位数字)
如果 column_X 是 20 位数字,则前缀是从“01”到“99”的任意位置
我正在使用 teradata sql 协助
根据您的逻辑,如果字符串只有 20 个字符(类似于 June7 的答案,但使用标准 SQL/Teradata 语法,您只需在前面添加 '99'
):
join ...
on case when char_length(column_x) = 20 then '99' else '' end || column_x = column_y
编辑:
根据您的评论如果 X 有 20 位数字,则它必须与以“01”或“99”开头的 Y 列连接这可能是您想要的:
on right(column_x, 20)= right(column_y, 20)
and (char_length(column_x) = 22
or substr(column_y, 1, 2) <> '00')
这就是我认为您正在寻找的内容,我已经添加了对解释我的理解的两个连接条件的评论。如果我误解了什么,请告诉我。我从未使用过 teradata SQL,因此您可能需要将我对 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')
我有 column_x 包含 20 位或 22 位数字,column_Y 包含 22 位数字。
如果 column_x 的号码是 20 位长,我想加入 column_Y,只有 column_Y 中第二位不等于 0 的号码。 否则(当 column_x 号码长 22 位时),我想正常加入 column_x 和 column_Y 的号码。
如何操作?
例如,
如果X列有数字00000000000579701673(20位)和00000000000000000957821317(22位数字),并且Y列具有数字99000000000000000579701673(22数字)(22数字)和0000000000000000000000000000000000000000000000007777782位(I I INJITSITITSITITS)(I I IDIGITSITITS)(I I I IGIANIT)来自 column_x 和来自 column_Y 的 99000000000000579701673(22 位数字)和来自 column_Y 的 0000000000000957821317(22 位数字)和来自 column_Y
的 0000000000000957821317(22 位数字)如果 column_X 是 20 位数字,则前缀是从“01”到“99”的任意位置 我正在使用 teradata sql 协助
根据您的逻辑,如果字符串只有 20 个字符(类似于 June7 的答案,但使用标准 SQL/Teradata 语法,您只需在前面添加 '99'
):
join ...
on case when char_length(column_x) = 20 then '99' else '' end || column_x = column_y
编辑:
根据您的评论如果 X 有 20 位数字,则它必须与以“01”或“99”开头的 Y 列连接这可能是您想要的:
on right(column_x, 20)= right(column_y, 20)
and (char_length(column_x) = 22
or substr(column_y, 1, 2) <> '00')
这就是我认为您正在寻找的内容,我已经添加了对解释我的理解的两个连接条件的评论。如果我误解了什么,请告诉我。我从未使用过 teradata SQL,因此您可能需要将我对 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')