Chủ Nhật, 19 tháng 9, 2021

Hàm Hàm REGEXP_INSTR trong Oracle

Trong bài này chúng ta sẽ tìm hiểu một hàm rất hay dùng để xử lý chuỗi nâng cao dựa vào chuỗi pattern, đó là hàm REGEXP_INSTR. hàm này có công dụng là tìm một chuỗi con nằm trong chuỗi cha dựa vào mẫu so khớp pattern, hay còn gọi là mẫu Regular Expression.

1. Cú pháp hàm REGEXP_INSTR trong Oracle

Hàm này rất hữu ích bởi nó cho phép bạn tìm những chuỗi con có tính phức tạp, cú pháp của nó như sau.

Cú pháp

1
2
3
4
5
6
7
8
REGEXP_INSTR(
    STRING,
    pattern [,
    start_position [,
    nth_appearance [,
    return_option [,
    match_parameter [, s
    ub_expression ] ] ] ] ] )

Trong đó:

  • string là chuỗi cha, nghĩa là chuỗi cần tìm chuỗi con trong đó
  • pattern là mẫu so khớp, bạn có thể xem danh sách mẫu so khớp phía dưới đây.
    ValueDescription
    ^Matches the beginning of a string. If used with a match_parameter of 'm', it matches the start of a line anywhere within expression.
    $Matches the end of a string. If used with a match_parameter of 'm', it matches the end of a line anywhere within expression.
    *Matches zero or more occurrences.
    +Matches one or more occurrences.
    ?Matches zero or one occurrence.
    .Matches any character except NULL.
    |Used like an "OR" to specify more than one alternative.
    [ ]Used to specify a matching list where you are trying to match any one of the characters in the list.
    [^ ]Used to specify a nonmatching list where you are trying to match any character except for the ones in the list.
    ( )Used to group expressions as a subexpression.
    {m}Matches m times.
    {m,}Matches at least m times.
    {m,n}Matches at least m times, but no more than n times.
    \nn is a number between 1 and 9. Matches the nth subexpression found within ( ) before encountering \n.
    [..]Matches one collation element that can be more than one character.
    [::]Matches character classes.
    [==]Matches equivalence classes.
    \dMatches a digit character.
    \DMatches a nondigit character.
    \wMatches a word character.
    \WMatches a nonword character.
    \sMatches a whitespace character.
    \Smatches a non-whitespace character.
    \AMatches the beginning of a string or matches at the end of a string before a newline character.
    \ZMatches at the end of a string.
    *?Matches the preceding pattern zero or more occurrences.
    +?Matches the preceding pattern one or more occurrences.
    ??Matches the preceding pattern zero or one occurrence.
    {n}?Matches the preceding pattern n times.
    {n,}?Matches the preceding pattern at least n times.
    {n,m}?Matches the preceding pattern at least n times, but not more than m times.
  • start_position là vị trí bắt đầu tìm, nếu không truyền vào thì nó sẽ bắt đàu từ vị trí đầu tiên.
  • nth_appearance là thứ xuất hiện thứ mấy trong chuỗi, ví dụ bạn nhập số 2 thì nó sẽ tìm vị trí của chuỗi con xuất hiện lần thứ hai.
  • return_option là không bắt buộc, nó có hai giá trị là 0 hoặc 1 và mặc định là 0. Nếu sử dụng giá trị 0 thì sẽ trả về vị trí của ký tự đầu tiên, nếu là 1 thì sẽ trả về vị trí của kí tự kế liền với chuỗi so khớp, nghĩa là kí tự tiếp theo.
  • match_parameter là tham số khai báo mưc độ ảnh hưởng.
    ValueDescription
    'c'Perform case-sensitive matching.
    'i'Perform case-insensitive matching.
    'n'Allows the period character (.) to match the newline character. By default, the period is a wildcard.
    'm'expression is assumed to have multiple lines, where ^ is the start of a line and $ is the end of a line, regardless of the position of those characters in expression. By default, expression is assumed to be a single line.
    'x'Whitespace characters are ignored. By default, whitespace characters are matched like any other character.
  • subexpression được sử dụng khi mẫu có biểu thức con và bạn muốn chỉ ra biểu thức con nào trong mẫu là đích trả về. Nó sẽ có giá trị từ 1 đến 9.

Return

Hàm này trả về vị trí xuất hiện của chuỗi con theo thông số cấu hình của hàm.

Version

Hàm này chỉ sử dụng được ở các phiên bản sau:

  • Oracle 12c, Oracle 11g, Oracle 10g

2. Ví dụ hàm REGEXP_INSTR trong Oracle

Sau đây là một vài ví dụ cách sử dụng hàm này, nó hơi phức tạp nên bạn phải thực hành theo mới hiểu được. Nếu bạn chưa biết qua Regex thì cũng là một bất tiện khi học bài này.

Ví dụ: Tìm vị trí xuất hiện của chữ t đầu tiên trong chuỗi.

1
2
3
4
SELECT REGEXP_INSTR ('Freetuts is a great resource', 't')
FROM message;
 
Result: 5

Trong ví dụ này sẽ trả về 5 tại vì chữ t xuất hiện tại vị trí thứ 5 trong chuỗi freetuts.

Ví dụ 2: Tìm vị trị xuất hiện chữ r khôn phân biệt hoa thường trong chuỗi.

1
2
3
4
SELECT REGEXP_INSTR ('FReetuts is a great resource', 'r', 1, 1, 0, 'i')
FROM message;
 
Result: 2

Ví dụ này sẽ trả về 2, tại vì theo thông số cấu hình là không phân biệt hoa thường.

Ví dụ 3: Tìm vị trí xuất hiện chữ a hoặc b hoặc s không phân biệt hoa thường.

1
2
3
4
SELECT REGEXP_INSTR ('Freetuts is a great resource', 'a|b|s', 1, 1, 0, 'i')
FROM message;
 
Result: 8

Mình đã dùng dấu | để dại diện cho toán tử OR.

Như vậy mình đã giải thích sơ lược về công dụng của hàm REGEXP_INSTR trong Oracle, đây quả thực là rất khó với những bạn không biết lập trình, còn những bạn rành lập trình thì nó rất đơn giản bởi biểu thức chính quy quá quen thuộc đối với họ.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, oracle oca, oracle ocp, oracle ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master