MySQL - REGEXP_LIKE() 函式



MySQL 支援各種型別的模式匹配操作,以從大型資料庫表中檢索過濾後的結果集。但是,使用正則表示式進行模式匹配是執行復雜搜尋的強大方法。

正如我們在上一章中看到的,MySQL regexp_instr() 函式用於返回找到的模式的位置。但是,如果您只想檢測模式是否存在於資料中,則可以使用 **regexp_like()** 函式。

MySQL REGEXP_LIKE() 函式

MySQL regexp_like() 函式也用於搜尋與指定模式匹配的字串。如果該字串與指定的模式匹配,則此函式返回 1;如果沒有匹配,則返回 0;如果字串或模式為 NULL,則返回 NULL。此函式中使用的模式可以是擴充套件正則表示式,而不僅僅是普通字串。

語法

以下是 MySQL regexp_like() 函式的語法:

REGEXP_LIKE(expr, pattern[, match_type])

引數

regexp_like() 函式採用以下引數值:

  • **expr:** 執行搜尋的字串

  • **pattern:** 在字串中搜索的模式

  • **match_type:** (可選引數)指定如何執行匹配的字串;包括區分大小寫的匹配 (c)、不區分大小寫的匹配 (i)、多行模式 (m)、匹配行終止符 (n)、匹配僅限 Unix 的行尾 (u)。

示例

在此示例中,我們使用 MySQL REGEXP_LIKE() 函式對簡單字串執行搜尋操作:

SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') 
AS RESULT;

搜尋模式“To”存在於字串中,因此返回 1 作為輸出。

結果
1

現在,如果在字串中找不到匹配項,則結果將為“0”,如下所示:

SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'Hello') 
AS RESULT;

以下是輸出:

結果
0

讓我們也向此函式傳遞可選引數作為區分大小寫的匹配 (c),並觀察結果:

SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 't', 'c') 
AS RESULT;

執行上面的查詢將產生以下輸出:

結果
1

示例

如果傳遞給此函式的前兩個引數中的任何一個為 NULL,則此函式返回 NULL。在下面的查詢中,我們將 NULL 傳遞給字串引數。

SELECT REGEXP_LIKE(NULL, 'value') AS Result;

以下是輸出:

結果
NULL

在這裡,我們將 NULL 作為搜尋模式傳遞:

SELECT REGEXP_LIKE('Welcome to Tutorialspoint', NULL) 
AS Result;

執行上面的查詢將產生以下輸出:

結果
NULL

示例

在另一個示例中,讓我們使用 REGEXP_LIKE() 函式對名為 **CUSTOMERS** 的資料庫表執行搜尋操作。首先,讓我們使用以下查詢建立表:

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查詢將 7 條記錄插入到上面建立的表中:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

執行以下查詢以顯示 CUSTOMERS 表的所有記錄:

Select * from CUSTOMERS;

以下是 CUSTOMERS 表:

ID 姓名 (NAME) 年齡 (AGE) 地址 (ADDRESS) 薪水 (SALARY)
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

以下查詢選擇 NAME 列以字母“K”開頭的 CUSTOMERS 表中的記錄:

SELECT REGEXP_LIKE(NAME, '^K') 
AS RESULT FROM CUSTOMERS;

如果有一個名字以字母“K”開頭,則輸出為 1,否則為 0:

結果
0
1
1
0
0
1
0

以下查詢檢查 'CUSTOMERS' 表中的 'ADDRESS' 列是否包含字母“K”(不區分大小寫)。如果地址包含“K”或“k”,則結果為 1;否則為 0。

SELECT REGEXP_LIKE(ADDRESS, 'R', 'i') 
AS RESULT FROM CUSTOMERS;

正如我們在輸出表中看到的,地址列的第 6 行和第 7 行包含字母“K”(不區分大小寫):

結果
0
1
1
0
0
1
0

使用客戶端程式的 REGEXP_LIKE() 函式

除了使用 MySQL 查詢執行 REGEXP_Like() 函式外,我們還可以使用 PHP、Node.js、Java 和 Python 等客戶端程式來實現相同的結果。

語法

以下是此操作在各種程式語言中的語法:

要透過 PHP 程式搜尋與指定模式匹配的字串,我們需要使用 **mysqli** 函式 **query()** 執行“SELECT”語句,如下所示:

$sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT";
$mysqli->query($sql);

要透過 Node.js 程式搜尋與指定模式匹配的字串,我們需要使用 **mysql2** 庫的 **query()** 函式執行“SELECT”語句,如下所示:

sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT";
con.query(sql);

要透過 Java 程式搜尋與指定模式匹配的字串,我們需要使用 **JDBC** 函式 **executeUpdate()** 執行“SELECT”語句,如下所示:

String sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT";
statement.executeQuery(sql);

要透過 Python 程式搜尋與指定模式匹配的字串,我們需要使用 MySQL **Connector/Python** 的 **execute()** 函式執行“SELECT”語句,如下所示:

sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT" 
cursorObj.execute(sql)

示例

以下是程式:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT"; if($result = $mysqli->query($sql)){ while($row = mysqli_fetch_array($result)){ printf("Result: %d", $row['RESULT']); } } if($mysqli->error){ printf("Error message: ", $mysqli->error); } $mysqli->close();

輸出

獲得的輸出如下所示:

Result: 1
var mysql = require('mysql2');
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"password"
});
 //Connecting to MySQL
 con.connect(function(err) {
 if (err) throw err;
  //console.log("Connected successfully...!");
  //console.log("--------------------------");
 sql = "USE TUTORIALS";
 con.query(sql);
 sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT";
 console.log("Select query executed successfully..!");
 console.log("Table records: ");
 con.query(sql);
 con.query(sql, function(err, result){
 if (err) throw err;
 console.log(result);
 });
});    

輸出

獲得的輸出如下所示:

Select query executed successfully..!
Table records:
[ { RESULT: 1 } ]      
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class regexp_like {
    public static void main(String[] args) {
        String url = "jdbc:mysql://:3306/TUTORIALS";
        String user = "root";
        String password = "password";
        ResultSet rs;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            //System.out.println("Database connected successfully...!");
            String sql = "SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT";
            rs = st.executeQuery(sql);
            while(rs.next()) {
                String result = rs.getString("RESULT");
                System.out.println("Result: " + result);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}    

輸出

獲得的輸出如下所示:

Result: 1
import mysql.connector
# Establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
# Creating a cursor object
cursorObj = connection.cursor()
regexp_like_query = f"SELECT REGEXP_LIKE('Welcome To Tutorialspoint!', 'To') AS RESULT"
cursorObj.execute(regexp_like_query)
# Fetching all the results
results = cursorObj.fetchall()
# Display the result
print("Result of REGEXP_LIKE() Function:")
for row in results:
    result = row[0]
    if result:
        print("The pattern 'To' is found in the given string.")
    else:
        print("The pattern 'To' is not found in the given string.")
cursorObj.close()
connection.close()    

輸出

獲得的輸出如下所示:

Result of REGEXP_LIKE() Function:
The pattern 'To' is found in the given string.
廣告