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

свържете чрез клауза в regex_substr

"Злоупотребата" (както го изрази Колин 'т Харт) на connected by има добра цел тук:чрез използване на REGEXP_SUBSTR можете да извлечете само едно от 4-те съвпадения (23,34,45,56):регулярният израз [^,]+ съответства на всяка последователност от знаци в низа, която не съдържа запетая.

Ако опитате да стартирате:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

ще получите 23 .

и ако опитате да стартирате:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

ще получите също 23 само че сега също така задаваме два допълнителни параметъра :започнете да търсите в позиция 1 (която е по подразбиране) и върнете 1-то срещане.

Сега нека стартираме:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

този път ще получим 34 (2-ро среща) и с помощта на 3 като последният параметър ще върне 45 и така нататък.

Използването на рекурсивно connected by заедно с level гарантира, че ще получите всички релевантни резултати (но не непременно в оригиналния ред!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

ще върне:

TOKEN
23
34
45
56

който не само съдържа всичките 4 резултата, но и го разделя на отделни редове в набора от резултати!

Ако щес цигулка с него - може да ви даде по-ясна представа за темата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е изглед в Oracle?

  2. Как да създадете VARRAY като обект на база данни в базата данни на Oracle

  3. Как мога да избера записи САМО от вчера?

  4. Автоматично увеличение за Oracle

  5. Как да избера всички колони от таблица, плюс допълнителни колони като ROWNUM?