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

Podziel wartości oddzielone przecinkami na kolumny w Oracle

Strzec się! Wyrażenie regexp_substr formatu '[^,]+' nie zwróci oczekiwanej wartości, jeśli na liście znajduje się element null i chcesz, aby ten element lub jeden po nim. Rozważmy ten przykład, w którym czwarty element ma wartość NULL, a chcę mieć piąty element i w związku z tym oczekuję, że zostanie zwrócona „5”:

SQL> select regexp_substr('1,2,3,,5,6', '[^,]+', 1, 5) from dual;

R
-
6

Niespodzianka! Zwraca 5. element NON-NULL, a nie faktyczny 5. element! Zwrócone dane są nieprawidłowe i możesz ich nawet nie złapać. Spróbuj zamiast tego:

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

R
-
5

Tak więc poprawiony powyżej REGEXP_SUBSTR mówi, aby szukać piątego wystąpienia 0 lub więcej znaków oddzielonych przecinkami, po których następuje przecinek lub koniec wiersza (pozwala na następny separator, czy to przecinek, czy koniec wiersza) i po znalezieniu zwróć pierwszą podgrupę (dane NIE zawierają przecinka ani końca wiersza).

Wzorzec dopasowania wyszukiwania '(.*?)(,|$)' wyjaśniono:

(             = Start a group
.             = match any character
*             = 0 or more matches of the preceding character
?             = Match 0 or 1 occurrences of the preceding pattern
)             = End the 1st group
(             = Start a new group (also used for logical OR)
,             = comma
|             = OR
$             = End of the line
)             = End the 2nd group

EDYCJA:Dodano więcej informacji i uproszczono wyrażenie regularne.

Zobacz ten post, aby uzyskać więcej informacji i sugestię, aby zawrzeć to w funkcji umożliwiającej łatwe ponowne użycie:REGEX, aby wybrać n-tą wartość z listy, pozwalając na nullsTo jest post, w którym odkryłem format '[^,]+' ma problem. Niestety jest to format wyrażeń regularnych, który najczęściej będziesz widzieć jako odpowiedź na pytania dotyczące przetwarzania listy. Drżę na myśl o wszystkich nieprawidłowych danych zwracanych przez '[^,]+' !



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie niestandardowego ekranu logowania w Oracle Forms 10g

  2. Widok zmaterializowany a tabele:jakie są zalety?

  3. Obsługa danych nasion w patchowaniu online R12.2

  4. Plany wykonania Oracle przy użyciu operatora LIKE z funkcją DETERMINISTIC

  5. Usuwanie wiodących zer z dewelopera varchar sql