
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入到選擇
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - UNION 與 JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數字函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 雜項概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入到資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字元集
- MySQL - 校對
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示 Processlist
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - REGEXP_INSTR() 函式
MySQL 支援各種型別的模式匹配操作,以從大型資料庫表中檢索過濾後的結果集。但是,使用正則表示式進行模式匹配是一種執行復雜搜尋的強大方法。
正則表示式在技術上被定義為表示輸入文字中模式的字元序列。它用於使用某些模式定位或替換文字字串;此模式可以是單個字元、多個字元或單詞等。
MySQL 中的這些正則表示式提供了各種函式和運算子來輕鬆執行搜尋操作。其中一個函式是regexp_instr()函式。
MySQL REGEXP_INSTR() 函式
MySQL regexp_instr() 函式用於將指定的模式與字串或資料庫表中的資料進行匹配。如果存在匹配,此函式返回字串匹配指定模式的子字串的起始索引,如果不存在匹配,則返回 0,如果字串或模式為 NULL,則返回 NULL。此字串的字元索引從 1 開始。
語法
以下是 MySQL regexp_instr() 函式的語法:
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])
其中expr是要執行搜尋的字串,pat是要搜尋的模式/正則表示式。除了表示式和字串值之外,此方法還接受以下可選引數。
引數
regexp_instr() 函式採用以下引數值:
expr: 執行搜尋的字串
pattern: 在字串中搜索的模式
以下是可以傳遞給此函式的可選引數:
pos: 在 expr 中開始搜尋的位置。如果省略,則預設為 1。
occurrence: 要搜尋的匹配的哪個出現次數。如果省略,則預設為 1。
return_option: 要返回哪種型別的職位。如果此值為 0,則 REGEXP_INSTR() 返回匹配子字串的第一個字元的位置。如果此值為 1,則 REGEXP_INSTR() 返回匹配子字串後的位置。如果省略,則預設為 0。
match_type:這是一個由表示所需匹配特徵的各種字元組成的字串,它可以包含一個或所有這些字元。以下是您可以使用各種字元指定匹配型別的字元。
c 此字元表示區分大小寫的匹配。
i 此字元表示不區分大小寫的匹配。
m 此字元表示即單個字串中的多行(以行終止符分隔)被識別。
n 如果指定此字元,則點 (.) 字元匹配行終止符。
u 如果指定此字元,則只有換行符被 ., ^ 和 $ 識別為行結束符。
示例
在此示例中,我們使用 MySQL REGEXP_INSTR() 函式對簡單字串執行搜尋操作:
SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT;
模式“To”在第 9 個索引處找到:
結果 |
---|
9 |
如果在字串中找不到匹配項,則返回值將為“0”:
SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'xx') AS RESULT;
以下是輸出:
結果 |
---|
0 |
示例
讓我們也向此函式傳遞可選引數並觀察結果。在這裡,搜尋搜尋位置從 5 開始,以查詢該位置之後“T”的第二個出現次數。由於返回值選項設定為 1,因此返回匹配後的位置。
SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'T', 5, 2, 1) AS RESULT;
輸出
以下是輸出:
結果 |
---|
13 |
示例
以下查詢在提供的字串“9848032919”中搜索任何字母字元的位置。如果找到,則返回 1。否則,返回 0。
SELECT REGEXP_INSTR('9848032919', '[[:alpha:]]');
輸出
執行上述查詢將產生以下輸出:
REGEXP_INSTR('9848032919', '[[:alpha:]]') |
---|
0 |
示例
以下查詢搜尋提供的字串中“town”或“city”的位置:
SELECT REGEXP_INSTR('Vishakapatnam is city of destiny ', 'town|city') As Result;
輸出
上述查詢的輸出如下所示:
結果 |
---|
0 |
示例
如果傳遞給此函式的前兩個引數中的任何一個為 NULL,則此函式返回 NULL。在這裡,我們傳遞“NULL”作為搜尋模式。
SELECT REGEXP_INSTR('Tutorialspoint', NULL) As Result;
如果我們編譯並執行該查詢,則結果如下所示:
結果 |
---|
NULL |
在下面的查詢中,我們將 'NULL' 傳遞給字串引數。
SELECT REGEXP_INSTR(NULL, 'to') As Result;
當我們執行上面的查詢時,輸出如下所示:
結果 |
---|
NULL |
示例
在另一個示例中,讓我們使用 REGEXP_INSTR() 函式對名為 **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) );
使用以下 INSERT 查詢將一些記錄插入到上面建立的表中:
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 |
以下查詢選擇從 CUSTOMERS 表的 NAME 列中以字母 'K' 開頭的字串的第一次出現的職位:
SELECT REGEXP_INSTR(NAME, '^K') AS RESULT FROM CUSTOMERS;
正如我們在下面的輸出中看到的,NAME 列中有三個以字母 K 開頭的字串。
結果 |
---|
0 |
1 |
1 |
0 |
0 |
1 |
0 |
客戶端程式
我們還可以使用客戶端程式(例如 PHP、Node.js、Java、Python)執行 MySQL REGEXP_INSTR() 函式,以將指定的模式與字串或資料庫表中的資料匹配。
語法
以下是各種程式語言中此操作的語法:
要檢索與特定模式匹配的 MySQL 資料庫中的所有記錄(無論是字串還是資料),透過 PHP 程式,我們使用 **mysqli** 函式 **query()** 執行 'SELECT' 語句,如下所示:
$sql = "SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT"; $mysqli->query($sql);
要檢索與特定模式匹配的 MySQL 資料庫中的所有記錄(無論是字串還是資料),透過 Node.js 程式,我們使用 **mysql2** 庫的 **query()** 函式執行 'SELECT' 語句,如下所示:
sql = "SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT"; con.query(sql);
要檢索與特定模式匹配的 MySQL 資料庫中的所有記錄(無論是字串還是資料),透過 Java 程式,我們使用 **JDBC** 函式 **executeUpdate()** 執行 'SELECT' 語句,如下所示:
String sql = "SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT"; statement.executeQuery(sql);
要檢索與特定模式匹配的 MySQL 資料庫中的所有記錄(無論是字串還是資料),透過 Python 程式,我們使用 MySQL **Connector/Python** 的 **execute()** 函式執行 'SELECT' 語句,如下所示:
sql = "SELECT REGEXP_INSTR('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_INSTR('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: 9
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_INSTR('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: 9 } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class regexp_instr { 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_INSTR('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: 9
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_instr_query = f"SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT" cursorObj.execute(regexp_instr_query) # Fetching all the results results = cursorObj.fetchall() # Display the result print("Result of REGEXP_INSTR() Function:") for row in results: position = row[0] if position > 0: print(f"The pattern 'To' found at position {position}") else: print("The pattern 'To' not found in the given string") cursorObj.close() connection.close()
輸出
以下是上述程式碼的輸出:
Result of REGEXP_INSTR() Function: The pattern 'To' found at position 9