Sql 删除拖曳管道分隔符和介于两者之间的管道

Sql 删除拖曳管道分隔符和介于两者之间的管道,sql,teradata,Sql,Teradata,我正在将三个电话号码(由管道分隔符分隔)加载到Teradata DWH中的一列中 如果三个电话号码同时存在,则该值应为 像这个123 | 456 | 789 如果第一个和第三个存在,则123 | 789 如果出现第一个和第二个,则不超过123 | 456 如果存在第二个和第三个,则为456 | 789 编写的查询存在一些问题,如果有任何电话号码丢失,比如说如果第二个电话号码丢失,它将存储如下值123 | | 789,或者如果第三个电话号码丢失,它将给出123 | 456 | 我们不希望在两个管道

我正在将三个电话号码(由管道分隔符分隔)加载到Teradata DWH中的一列中

  • 如果三个电话号码同时存在,则该值应为 像这个123 | 456 | 789
  • 如果第一个和第三个存在,则123 | 789
  • 如果出现第一个和第二个,则不超过123 | 456
  • 如果存在第二个和第三个,则为456 | 789
  • 编写的查询存在一些问题,如果有任何电话号码丢失,比如说如果第二个电话号码丢失,它将存储如下值
    123 | | 789
    ,或者如果第三个电话号码丢失,它将给出
    123 | 456 |

    我们不希望在两个管道之间有尾管或两个管道。请建议使用Teradata查询来实现此功能。

    逻辑是:

    为每列指定不同的权重,然后计算所有3列长度的加权和。假设每个电话号码都有10位数长。这是查询/伪代码

    查询:

    Select
    case 1*LENGTH(firstCol)+2*LENGTH(secondCol)+4*LENGTH(thirdCol)
    when 70 then CONCAT( firstcol,'|', secondcol,'|', thirdCol)  
    when 60 then CONCAT( secondcol, '|', thirdCol)
    when 50 then CONCAT( firstcol, '|', thirdCol)
    when 30 then CONCAT (firstcol, '|', secondcol)
    when 10 then firstcol
    when 20 then secondcol
    when 40 then thirdCol
    else null
    end
    from phoneNumbersTable
    

    分享您迄今为止实施的查询,以便对您的错误之处或可以改进的地方提出建议。什么是“缺失”?无效的空字符串?Sudarshan,我们可以看到你自己的查询尝试吗?我们鼓励发帖人在发帖前认真尝试一下自己的问题。为什么问题和答案都被否决了?看起来这是一个合理的问题,逻辑上有什么问题吗?如果人们没有说明为什么他们投了反对票,我们只能猜测。我的猜测是,这个问题是零努力的,而且看起来它应该被否决。你的回答要求投票,所以这可能是你得分的原因-我们不鼓励在这里要求投票。