Обрезать всю строку, а не символы - Redshift - PullRequest
0 голосов
/ 27 мая 2019

Это тот же вопрос, что и здесь , но ответы там были очень специфичны для PHP (и я использую Redshift SQL, а не PHP).

Я пытаюсьудалить определенные суффиксы из строк.Я попытался использовать RTRIM , но это удалит любой из перечисленных символов, а не только полную строку.Я хочу, чтобы строка изменялась только в том случае, если существует точный суффикс, и я хочу, чтобы он был заменен только один раз.

Например, RTRIM("name",' Inc') преобразует "XYZ Company Corporation" в "XYZ Company Corporatio". (Удалено окончательное 'n', поскольку оно является частью 'Inc')

Затем я попытался использовать оператор CASE, чтобы ограничить неправильные замены, но это все равно не решило проблему,поскольку он будет продолжать делать замены после исходного суффикса.

Например, когда я запускаю это:

CASE WHEN "name" LIKE '% Inc' THEN RTRIM("name",' Inc')

, я получаю следующие результаты:

"XYZ Association Inc" становится "XYZ Associatio". (он обрезал Inc, но также и окончательное 'n')

Я знаю, что могу использовать функцию REPLACE , но я понимаю, что это заменит значенияоткуда-нибудь в строке, и я хочу заменить только тогда, когда она существует в конце строки.

Как я могу сделать это с Redshift?(У меня нет возможности использовать здесь какие-либо другие языки или инструменты).

1 Ответ

1 голос
/ 27 мая 2019

Вы можете использовать REGEXP_REPLACE, чтобы удалить завершающий Inc, используя регулярное выражение, которое прикрепляет Inc к концу строки:

CASE WHEN "name" LIKE '% Inc' THEN REGEXP_REPLACE("name", ' Inc$', '')
...