Postgres.Объединить поля без фиксированной длины - PullRequest
0 голосов
/ 08 октября 2018

У меня есть два столбца (A и B) в таблице 1, и я хочу объединить их в другой столбец (C), только если начало B не A, и если это не так, просто скопируйте 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 голосов
/ 08 октября 2018

Step1:

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

Step2:

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

Вы можете попробовать это и сообщить нам, ранее данное решение также является правильным;но что, если то же самое, например: 98 в col_a присутствует в середине col_b, а не в начале?

0 голосов
/ 08 октября 2018

Вы, кажется, хотите что-то вроде этого:

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

То есть вы можете использовать LIKE для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...