У меня есть два столбца (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 должен включать:
Я пытался:
UPDATE 1
SET C = B
WHERE LEFT (B) = A
UPDATE 1
SET C = concat(A,B)
WHERE LEFT(B) <> A
Но это не работает, так как мне нужно дать left () фиксированную длину. Что бы вы сделали, ребята?
Всего 2 ответа
Кажется, вы хотите что-то вроде этого:
UPDATE t
SET C = (CASE WHEN B LIKE A || '%' THEN B ELSE A || B END);
То есть вы можете использовать LIKE
для сравнения.
Шаг 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;
вы можете попробовать это и сообщить нам, что ранее данное решение также верно; но что, если тот же самый пример: 98 в col_a присутствует в середине col_b, а не в начале?