Postgres的。连接没有固定长度的字段

问题描述 投票:2回答:2

我在表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()一个固定的长度。你们会做什么?

sql postgresql
2个回答
5
投票

你好像想要这样的东西:

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

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


0
投票

步骤1:

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

第2步:

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

你可以尝试这个让我们知道,先前给出的解决方案也是正确的;但是如果相同的例如:col_a中的98出现在col_b的中间而不是在开头?

© www.soinside.com 2019 - 2024. All rights reserved.