#sql #oracle #plsql
#sql #Oracle #plsql
Вопрос:
Я пытаюсь получить название местоположения после заголовка из столбца. Примером названия должности является ‘Manager — Майами’. Я пытаюсь выполнить следующее,
SELECT UPPER(LTRIM('Manager - Miami', 'Manager - ')) FROM DUAL
Я ожидаю, что результат будет MIAMI
, но он возвращает только IAMI
.
Ответ №1:
В Oracle вторым аргументом LTRIM()
является список символов. По умолчанию они чувствительны к регистру.
Итак, 'm'
это первый символ в, ''Manager - Miami'
которого нет в 'District Manager - '
, поэтому все, что до него, удаляется.
Я могу предположить, что вам действительно нужно какое-то regexp_substr()
или regexp_replace()
, но вы на самом деле не указываете логику.
Комментарии:
1. Спасибо за объяснение. Это было удаление всех символов из ‘set’. Комбинация SUBSTR и INSTR сработала идеально.
2. @Priom . . . Если бы вы объяснили, чего вы хотели достичь, я, вероятно, ответил бы и на это.
Ответ №2:
(L)ОБРЕЗАТЬ? Почему вы использовали бы ее для возврата «Miami»? Я бы выбрал SUBSTR INSTR , как в этом примере (CTE просто для того, чтобы мне не пришлось повторять строку несколько раз).
SQL> with test (col) as
2 (select 'Manager - Miami' from dual)
3 select trim(substr(col, instr(col, '-') 1)) result
4 from test;
RESUL
-----
Miami
SQL>
Кроме того, какова District Manager -
цель? Вы хотите также выбрать местоположение из этого? Его нет, поэтому будет возвращен — NULL:
SQL> with test (col) as
2 (select 'District Manager - ' from dual)
3 select trim(substr(col, instr(col, '-') 1)) result
4 from test;
R
-
SQL>
Комментарии:
1. Спасибо. District Manager был написан по ошибке, это должно быть только ‘Manager’. Я отредактировал вопрос. Это сработает в моем случае.
Ответ №3:
И вот версия regex_substr, которая будет выбирать то, что находится после последнего тире / пробела в конце строки:
SELECT REGEXP_SUBSTR('Manager - Miami', '- (.*)$', 1, 1, NULL, 1) FROM DUAL;