Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

REGEX để chọn giá trị thứ n từ danh sách, cho phép các giá trị rỗng

Cảm ơn những người đã trả lời. Sau khi xem xét các câu trả lời của bạn và các câu trả lời trong liên kết được cung cấp, tôi đã đến giải pháp này:

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

Data
----

Có thể được mô tả là "nhìn vào lần xuất hiện thứ hai của một tập hợp tùy chọn không hoặc nhiều ký tự được theo sau bởi dấu phẩy hoặc cuối dòng và trả về nhóm con thứ nhất (là dữ liệu trừ dấu phẩy hoặc cuối của dòng).

Tôi quên đề cập đến việc tôi đã thử nghiệm với giá trị rỗng ở nhiều vị trí khác nhau, nhiều giá trị rỗng, chọn nhiều vị trí khác nhau, v.v.

Cảnh báo duy nhất mà tôi có thể tìm thấy là nếu trường bạn tìm kiếm lớn hơn số có sẵn, nó sẽ trả về NULL, vì vậy bạn cần lưu ý điều đó. Không thành vấn đề đối với trường hợp của tôi.

CHỈNH SỬA:Tôi đang cập nhật câu trả lời được chấp nhận vì lợi ích của những người tìm kiếm trong tương lai có thể tình cờ gặp phải điều này.

Bước tiếp theo là đóng gói mã để nó có thể được tạo thành một hàm đơn giản hơn, có thể tái sử dụng. Đây là nguồn chức năng:

  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;

Điều này che giấu sự phức tạp của regex khỏi các nhà phát triển, những người có thể không cảm thấy thoải mái với nó và làm cho mã sạch hơn khi sử dụng. Gọi nó như thế này để nhận phần tử thứ 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. Tạo chèn sql vào cho Oracle

  2. HQL là null Và! =Null trên một cột Oracle

  3. Cách tốt nhất để chạy các truy vấn Oracle định kỳ

  4. Thiết lập tối thiểu cần thiết để triển khai ứng dụng .NET với máy khách Oracle 11 là gì?

  5. JDBC trả về tập kết quả trống