Почему функция LTRIM не возвращает ожидаемый результат - PullRequest
2 голосов
/ 29 марта 2019

Я пытаюсь получить название местоположения после заголовка из столбца.Пример названия должности - «Менеджер - Майами».Я пытаюсь сделать следующее:

 SELECT UPPER(LTRIM('Manager - Miami', 'Manager - ')) FROM DUAL

Я ожидаю, что результат будет MIAMI, но он возвращает только IAMI.

Ответы [ 3 ]

3 голосов
/ 29 марта 2019

В Oracle второй аргумент LTRIM() - это список символов. По умолчанию они чувствительны к регистру.

Итак, 'm' - это первый символ в ''Manager - Miami', которого нет в 'District Manager - ', поэтому все, прежде чем он будет удален.

Я могу предположить, что вы действительно хотите какой-то regexp_substr() или regexp_replace(), но вы не указываете логику.

2 голосов
/ 29 марта 2019

А вот версия regex_substr, которая выберет, что находится после последней черты / пробела в конце строки:

SELECT REGEXP_SUBSTR('Manager - Miami', '- (.*)$', 1, 1, NULL, 1) FROM DUAL;
2 голосов
/ 29 марта 2019

(L) TRIM?Почему вы используете его, чтобы вернуть «Майами»?Я бы пошел с 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...