如何Concat,替换和填充一列

时间:2016-11-17 16:24:59

标签: sql

所以我有两列ID喜欢连接在一起,删除破折号和前两个字符,以及定义返回的数字。

实施例

Po_no值为18-29201-202

Line_no值为6(id喜欢将其作为006返回)

我想最终得到这个29201202006

现在我正在将它们组合起来并删除破折号:

concat(replace(oe_hdr.po_no, '-', ''), job_price_line.line_no) as [PO and LINe NO],

结果:

18292012026

我怎么能删除po_no的前两位数字并确保line_no总是三位数?

1 个答案:

答案 0 :(得分:1)

您希望基本上连接两个部分,修改后的PO和标准格式的Line。你已经非常接近了,但是你的两个方案的公式都有些偏差。

replace(oe_hdr.po_no, '-', '')是正确的,但你只想要正确的8位数字,假设你的PO格式总是一致的(如果没有,你需要更复杂的东西,比如找到第一个“ - ”,并且mid() / substr()取决于系统)。简而言之,您实际上在寻找以下内容:

right(replace(oe_hdr.po_no, '-', ''),8)

在第二部分中,将前导0添加到字符串的最简单方法是连接,但是可能需要多个0,然后需要right()到所需的字符串长度:

Right(concat("000",job_price_line.line_no),3)

您可以将这两者结合起来获得完整的字符串:

concat(
    right(replace(oe_hdr.po_no, '-', ''),8),
    right(concat("000",job_price_line.line_no),3)
    )