Я написал запрос, который будет искать column1 в моей таблице A, когда длина записи <8 символов. Запрос обычно такой:

SELECT A.Column1, A.Column2
FROM SCHEMA.A as A
WHERE length(A.Column1) < '8';

Это дает мне все результаты, которые я ожидаю. Теперь я хочу добавить для каждого из этих результатов знак «-» после 4-го символа в каждом результате. Например, если в моем исходном запросе была получена строка со значением column1 1234567, я бы хотел обновить его до 1234-567. Это будет верно для всех возвращаемых строк. Я могу сделать это, используя Java-код, но я надеялся написать сценарий SQL вместо этого, так как это быстрее и не будет выброшен. Я просмотрел различные примеры синтаксиса db2 Update, но ни один из них не показывает, что именно я ищу. Пожалуйста помоги!

1
Doug 24 Апр 2017 в 22:39

2 ответа

Лучший ответ

Вы можете использовать функция INSERT():

UPDATE SCHEMA.A
    SET Column1 = INSERT(Column1, 5, 0, '-')
    WHERE length(A.Column1) < 8;

Попробуйте сделать это с помощью SELECT перед обновлением.

Кроме того, length() возвращает число. Значение сравнения должно быть числом, а не строкой.

2
Gordon Linoff 24 Апр 2017 в 19:42

Я полагаю, что вы не хотите добавлять символ «-», если длина столбца <4 Пример: 123, вам не нужно 123-, и 1234, а не 1234-, тогда вы должны исправить свое условие where следующим образом:

UPDATE SCHEMA.A
SET Column1 = left(Column1, 4) || '-' || substr(Column1, 5)
WHERE length(Column1) between 4 and 7;
1
Esperento57 25 Апр 2017 в 14:47
43596413