SQL и Oracle запрос, чтобы извлечь все до двух последних периодов - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужно извлечь все до двух последних периодов

напр.

Ввод: AA.BBB.12.11.cc

Вывод: AA.BBB.12

Следующий это пример запроса, который я использую, но он возвращает только символы перед первым периодом, но это не то, что мне нужно.

SELECT REGEXP_SUBSTR(t.column,'[^.]+',1,1)
 AS output
 FROM MY_Table  t where t.column is not null and rownum=1

Ответы [ 2 ]

3 голосов
/ 26 февраля 2020

Я бы использовал REGEXP_REPLACE здесь:

SELECT REGEXP_REPLACE(t.column, '\.[^.]+\.[^.]+$', '')
FROM MY_table
WHERE t.column IS NOT NULL AND rownum = 1;

Шаблон регулярного выражения \.[^.]+\.[^.]+$ будет соответствовать, начиная со второй до последней точки, всего содержимого до конца (включая также последнюю точку).

2 голосов
/ 26 февраля 2020

Вы можете просто использовать INSTR и SUBSTR следующим образом:

SQL> SELECT
  2      SUBSTR('AA.BBB.12.11.ccCC', 1, INSTR('AA.BBB.12.11.ccCC', '.', -2, 2) - 1) AS RESULT
  3  FROM DUAL;

RESULT
---------
AA.BBB.12

SQL>

- Обновление -

Для вопроса, заданного в комментарии используйте следующий запрос:

SQL> SELECT
  2      SUBSTR('AA.BB.CC.DD', 1, INSTR('AA.BB.CC.DD', '.', 1, 3) - 1) AS RESULT
  3  FROM DUAL;

RESULT
--------
AA.BB.CC

SQL>

Cheers !!

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