Postgres。串联没有固定长度的字段

时间:2018-10-08 11:23:00

标签: sql postgresql

我在表1上有两列(A和B),并且只在B的开头不是A的情况下才想将它们连接到另一列(C),如果不是这样,只需将B复制到C。 这里的关键点是A和B没有固定的长度,所以我认为我不能使用left(),因为它需要特定的长度。 例如:

ID        A                            B 
1          5                          48721
2         98                          98555
3         98                            136
4        841                     8417740313
5        841                         133889

在这种情况下,C列应包括:

  1. 对于ID = 1:548721
  2. 对于ID = 2:98555
  3. 对于ID = 3:98136
  4. 对于ID = 4:8417740313
  5. 对于ID = 5:841133889

我正在尝试:

UPDATE 1
SET C = B
WHERE LEFT (B) = A
UPDATE 1
SET C = concat(A,B)
WHERE LEFT(B) <> A

但是它不起作用,因为我需要给left()一个固定的长度。你们会做什么?

2 个答案:

答案 0 :(得分:5)

您似乎想要这样的东西:

UPDATE t
    SET C = (CASE WHEN B LIKE A || '%' THEN B ELSE A || B END);

也就是说,您可以使用LIKE进行比较。

答案 1 :(得分:0)

第一步:

update table 
set col_c = col_a||substr(col_b,length(col_a))
where 
substr(col_b,1,length(col_a))=col_a;

第二步:

update table 
set col_c = col_a||col_b
where 
substr(col_b,1,length(col_a))<>col_a;

您可以尝试一下,让我们知道, 较早给出的解决方案也是正确的;但是如果在col_b的中间而不是在开始处出现了相同的示例,例如col_a中的98呢?