Oracle
 sql >> Baza danych >  >> RDS >> Oracle

REGEX, aby wybrać n-tą wartość z listy, pozwalając na wartości null

Dzięki tym, którzy odpowiedzieli. Po przejrzeniu twoich odpowiedzi i odpowiedzi w podanym linku doszedłem do tego rozwiązania:

SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
  2  from dual;

Data
----

Które można opisać jako „spójrz na drugie wystąpienie opcjonalnego zestawu zero lub więcej znaków, po których następuje przecinek lub koniec wiersza, i zwróć pierwszą podgrupę (czyli dane bez przecinka lub końca linia).

Zapomniałem wspomnieć, że testowałem z wartościami null w różnych pozycjach, wielokrotnymi wartościami null, wybierając różne pozycje itp.

Jedynym zastrzeżeniem, jakie mogłem znaleźć, jest to, że jeśli pole, którego szukasz, jest większe niż dostępna liczba, po prostu zwraca NULL, więc musisz być tego świadomy. To nie problem w moim przypadku.

EDYCJA:Aktualizuję zaakceptowaną odpowiedź z korzyścią dla przyszłych wyszukiwarek, które mogą się na to natknąć.

Następnym krokiem jest enkapsulacja kodu, aby można go było przekształcić w prostszą funkcję wielokrotnego użytku. Oto źródło funkcji:

  FUNCTION  GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
    BEGIN
      RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
  END GET_LIST_ELEMENT;

Ukrywa to złożoność wyrażeń regularnych przed programistami, którzy mogą nie czuć się z tym tak dobrze, i sprawia, że ​​kod i tak jest czystszy, gdy jest używany. Nazwij to tak, aby uzyskać czwarty element:

select get_list_element('123,222,,432,555', 4) from dual;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest domyślna precyzja i skala liczby w Oracle?

  2. Jak dostroić lub przetestować wydajność kodu PLSQL w Oracle D2k Forms

  3. Pełne zrozumienie PDO ATTR_PERSISTENT

  4. ROWIDTONCHAR() Funkcja w Oracle

  5. Baza danych Oracle wisi w nieskończoność w zapytaniach UPDATE