Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разделите низ в Oracle

Проблем:

Искате да разделите низ в Oracle.

Пример:

Имате изречение и искате да го разделите с интервал.

Решение:

SELECT
REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL;

Таблицата с резултатите изглежда така:

части
A
пример
изречение.

Дискусия:

За да получите поднизове от низ, можете да използвате вградената функция REGEXP_SUBSTR() на Oracle. Необходими са четири аргумента:

  • Низът, който трябва да се търси за подниз.
  • Регулярният израз; т.е. моделът, който искате да намерите.
  • Позицията, от която искате да започнете да търсите шаблона (стойността по подразбиране е 1, което означава, че започвате от началото на низа).
  • Числото, което указва кое появяване на съответстващия подниз искате да видите (стойността по подразбиране е 1 , което означава, че трябва да се покаже първият съвпадащ подниз).

В нашия пример низът, който трябва да се търси, е 'An example sentence. ' В низа търсите поднизове, които са думи, които ние дефинираме тук като всякакви групи от всякакви знаци с изключение на интервали. Ето защо ние задаваме модела '[^ ]+ ', т.е. всяка последователност от знаци без интервал. [^ ] означава всеки знак с изключение на интервал и + знак означава едно или повече поява на такива знаци. Третият аргумент трябва да бъде по подразбиране (1 ), тъй като искате да търсите думи в целия низ от самото начало. Последният аргумент е най-трудният – трябва да промените стойността му за всеки низ, който ще бъде търсен. Трябва да е ниво – псевдоколона, налична в йерархични заявки с помощта на CONNECT BY – което в нашия случай ще бъде равно на номера на реда на текущия ред в резултата, когато се използва CONNECT BY. И така, имате:

REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level)

Този израз трябва да бъде избран от dual – псевдотаблица, използвана в Oracle, когато не избирате от действителна таблица. След това трябва да CONNECT BY оператора за йерархични заявки, при условие, че извлеченият подниз не трябва да е NULL . Извлеченият подниз ще бъде NULL, след като всички думи бъдат извлечени; йерархичната заявка ще спре изпълнението. И така, имате:

FROM dual CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL

Можете да прочетете тук за ниво и CONNECT BY.

Ако искате да разделите низа с друг разделител, можете лесно да промените заявката. Например, ако искате да разделите низа със запетая, променете '[^ ] +“ до „[^,]+ '. Ето примерна заявка:

SELECT REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) AS parts
FROM dual CONNECT BY REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) IS NOT NULL;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12154 не можа да разреши посочения идентификатор за свързване

  2. PL/SQL онлайн MCQ тест

  3. SQL:Как да намеря дубликати въз основа на две полета?

  4. hibernate oracle последователността произвежда голяма празнина

  5. Първичните ключове и индекси в езика на заявките Hive са възможни или не?