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

REGEXP_COUNT () Hàm trong Oracle

Trong Oracle, REGEXP_COUNT() hàm trả về số lần một mẫu xuất hiện trong một chuỗi nguồn.

Cú pháp

Cú pháp như sau:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

Ở đâu:

  • source_char là một biểu thức ký tự đóng vai trò là giá trị tìm kiếm.
  • pattern là biểu thức chính quy.
  • position là một số nguyên dương chỉ định nơi bắt đầu tìm kiếm. Giá trị mặc định là 1 , nghĩa là bắt đầu tìm kiếm ở ký tự đầu tiên.
  • match_param cho phép bạn thay đổi hành vi đối sánh mặc định của hàm. Ví dụ:nó cho phép bạn chỉ định phân biệt chữ hoa chữ thường, cách xử lý nhiều dòng và khoảng trắng, v.v.

Ví dụ

Đây là ví dụ cơ bản về việc sử dụng REGEXP_COUNT() trong Oracle:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Kết quả:

1

Trong trường hợp này có một kết quả phù hợp.

Biểu thức chính quy có thể rất mạnh và ví dụ này sử dụng một ví dụ rất đơn giản. Để sử dụng REGEXP_COUNT() một cách hiệu quả, bạn sẽ cần biết mẫu chính xác để sử dụng cho kết quả mong muốn. Các ví dụ trên trang này tập trung vào REGEXP_COUNT() chính nó, không phải trên biểu thức chính quy.

Không phù hợp

Dưới đây là một ví dụ mà không có kết quả phù hợp nào:

SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Kết quả:

0

Không có kết quả phù hợp, vì vậy 0 được trả lại.

Nhiều Kết hợp

Dưới đây là một ví dụ với nhiều kết quả phù hợp:

SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Kết quả:

2

Trong trường hợp này, có hai kết quả phù hợp.

Vị trí bắt đầu

Bạn có thể chỉ định một vị trí bắt đầu:

SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Kết quả:

1

Vì vậy, ở đây chúng tôi chỉ nhận được một trận đấu. Đó là bởi vì tìm kiếm không bắt đầu cho đến sau lần xuất hiện đầu tiên (vị trí 8).

Phân biệt chữ hoa chữ thường

REGEXP_COUNT() hàm tuân theo các quy tắc xác định đối chiếu của Oracle, xác định đối chiếu sẽ sử dụng khi khớp chuỗi với mẫu.

Tuy nhiên, bạn có thể chỉ định rõ ràng phân biệt chữ hoa chữ thường với đối số thứ tư tùy chọn. Khi bạn làm điều này, nó sẽ ghi đè bất kỳ phân biệt chữ hoa chữ thường hoặc độ nhạy trọng âm nào của đối chiếu đã xác định.

Bạn có thể chỉ định i để đối sánh không phân biệt chữ hoa chữ thường và c để đối sánh phân biệt chữ hoa chữ thường.

Đây là một ví dụ:

SELECT 
    REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Kết quả:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Ở đây, đối chiếu của tôi phân biệt chữ hoa chữ thường. Hai chuỗi còn lại buộc phải đối sánh không phân biệt chữ hoa chữ thường và phân biệt chữ hoa chữ thường.

Đối số rỗng

Ngoại trừ đối số thứ tư, cung cấp null đối với một đối số dẫn đến null :

SET NULL 'null';
SELECT 
    REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
    REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
    REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
    REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;

Kết quả:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null xảy ra do một SELECT trong SQL tuyên bố.

Tuy nhiên, bạn có thể sử dụng SET NULL để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null nên được trả lại.

Số lượng đối số sai

Không chuyển đối số nào cho hàm hoặc quá ít, dẫn đến lỗi:

SELECT REGEXP_COUNT()
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Điều tương tự cũng áp dụng khi chúng ta chuyển quá nhiều đối số:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Thông tin thêm

REGEXP_COUNT() hàm (cũng như cách triển khai các biểu thức chính quy khác của Oracle) tuân theo tiêu chuẩn biểu thức chính quy IEEE Portable Operating System Interface (POSIX) và các Nguyên tắc về Cụm từ Thông dụng Unicode của Unicode Consortium.

Xem tài liệu Oracle để biết thêm thông tin và ví dụ về REGEXP_COUNT() chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xem kế hoạch thực thi SQL trong Oracle?

  2. Tại sao Oracle.ManagedDataAccess không hoạt động khi Oracle.DataAccess hoạt động?

  3. Làm thế nào bạn có thể biết nếu một Gói, Thủ tục hoặc Hàm PL / SQL đang được sử dụng?

  4. lỗi cú pháp với truy vấn cập nhật khi tham gia với một số bảng

  5. Lỗi kích hoạt Oracle ORA-04091