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

REGEX, за да изберете n-та стойност от списък, позволявайки нулеви стойности

Благодаря на тези, които отговориха. След като разгледах вашите отговори и отговорите в предоставената връзка, стигнах до това решение:

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

Data
----

Което може да се опише като „вижте второто появяване на незадължителен набор от нула или повече знаци, последвани от запетая или края на реда, и върнете първата подгрупа (която е данните минус запетаята или края на линия).

Забравих да спомена, че тествах с null в различни позиции, множество нули, избирах различни позиции и т.н.

Единственото предупреждение, което мога да намеря, е ако полето, което търсите, е по-голямо от наличното число, то просто връща NULL, така че трябва да сте наясно с това. Не е проблем за моя случай.

РЕДАКТИРАНЕ:Актуализирам приетия отговор в полза на бъдещите търсещи, които могат да се натъкнат на това.

Следващата стъпка е да се капсулира кодът, така че да може да се превърне в по-проста функция за многократна употреба. Ето източника на функцията:

  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;

Това скрива сложността на регулярните изрази от разработчиците, които може да не са толкова удобни с него и прави кода по-чист така или иначе, когато се използва. Наречете го така, за да получите 4-ти елемент:

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. Как да конфигурирам Ruby on Rails с Oracle?

  2. CASE срещу DECODE

  3. Oracle Database Explorer:безплатно обучение и акредитация

  4. Ускорете операциите за групово вмъкване с NHibernate

  5. Доставчикът на ADO.NET „Oracle.ManagedDataAccess.Client“ или не е регистриран в конфигурационния файл на машината или приложението, или не може да бъде зареден