Начальная позиция для функции замены в db2 - PullRequest
0 голосов
/ 29 мая 2019

Я конвертирую некоторые функциональные возможности Access VBA в DB2 и обнаружил существенную разницу. VBA позволяет указать начальную точку в строке символов, над которой вы работаете. У DB2 нет такой опции. Он начинается с позиции 1 и заменяет все, что вы хотите заменить во всей строке. Как я могу заставить DB2 начать замену в указанном месте строки? Например, моя строка «Incongruent Plastics Incorporated», и я хочу заменить второй «Inc» в позиции 22 на «Inc». Я делаю это в цикле WHILE, проходя по длинным строкам, заменяя их части, пока они не станут меньше указанного максимума (15 или 30 в зависимости от поля).

Я посмотрел на функцию Locate, но я не уверен, что это правильно.

Replace(a.PAYEE_STD_NAME, B.FullWord, B.abbreviation, B.mLastWord)

Где a.PAYEE_STD_NAME - строка, на которую я смотрю, B.FullWord - это то, что я хочу заменить, B.abbreviation - это то, чем я хочу ее заменить, а B.mLastWord - это позиция, с которой я хочу начать. замена. Что-то вроде Replace («Incongruent Plastics Incorporated», «Incorporated», «Inc», 22)

Я ожидаю, что символы будут заменены, начиная с нужной позиции, ближе к задней части строки, а не в начале.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Возможно, рассмотрите возможность использования REGEXP_REPLACE https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061496.html

и, возможно, рассмотрите возможность повторного получения SQL, а не циклической логики

0 голосов
/ 29 мая 2019

Не очень хорошо в DB2, но это ограничение обычно можно обойти, используя SUBSTR

Эквивалент Replace(a.PAYEE_STD_NAME, B.FullWord, B.abbreviation, B.mLastWord) будет:

CONCAT(SUBSTR(a.PAYEE_STD_NAME, 1, B.mLastWord - 1), Replace(SUBSTR(a.PAYEE_STD_NAME, b.mLastWord), B.FullWord, B.abbreviation))

Это предполагает b.mLastWord больше 1, если это 1, вы можете использовать обычный REPLACE.

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