在 MySQL 中搜尋行以查詢子字串
在某些情況下,你必須在表中搜尋字串或子字串。
例如,你想知道 employee
表中有多少 Gmail 使用者。另一個例子是在 employee
表中查詢所有以 Je
開頭的 firstname
。
在這裡,搜尋一個字串或子字串就出現在圖片中,並且有不同的搜尋方式。POSITION()
用於標準 SQL,LOCATE()
和 %
萬用字元用於 MySQL,INSTR()
用於 Oracle。
我們將學習 MySQL 支援的方法,並觀察哪種方法是在 MySQL 中搜尋行以查詢子字串的最佳且簡單的方法。你可以檢視所有這些方法,然後決定哪種方法最適合你的情況。
方法 1:使用 %
萬用字元查詢字串/子字串
%
萬用字元用於替換字串中的一個或多個字元。此萬用字元與 LIKE
運算子一起使用,LIKE
運算子用於 WHERE
子句。
為了練習,我們建立了一個名為 employee
的新表。你可以使用下面給出的示例程式碼建立它並用資料填充它。
這樣,我們在學習的同時就會步調一致。
#Create employee table
CREATE TABLE employee(
id int not null primary key,
firstname varchar(60) not null,
lastname varchar(60) not null,
gender varchar(30) not null,
city varchar(40) not null,
email varchar(60) not null
);
#Insert data into employee table.
INSERT INTO employee VALUES
(1,'James','Robert','Male','London','jrober@gmail.com'),
(2,'Mary','Patricia','Female','Berlin','patricia@gmail.com'),
(3,'John','Michael','Male','Paris','johnmichael@yahoo.com'),
(4,'Jennifer','Linda','Female','Lisbon','jennifer@hotmail.com'),
(5,'William','David','Male','Rome','wdwilliam@gmail.com'),
(6,'Elizabeth','Barbara','Female','Dublin','elibarbara011@yahoo.com'),
(7,'Richard','Joseph','Male','Oslo', 'richard@gmail.com'),
(8,'Susan','Jessica','Female','Hamburg','susan01@yahoo.com'),
(9,'Thomas','Charles','Male','Texas', 'thomas.charles@hotmail.com'),
(10,'Karen','Nancy','Female','Washington','karenofficial@gmail.com');
SELECT * FROM employee;
輸出:
讓我們瞭解考慮使用%
萬用字元搜尋行以查詢字串或子字串的不同場景。
場景 1:查詢所有 Gmail
使用者。意思是,我們必須在 email
中找到一個子字串。
SELECT firstname, lastname from employee where email LIKE '%@gmail.com';
上面的 SQL 查詢將從 email
字串包含 gmail.com
的 employee
表中選擇 firstname
和 lastname
。
輸出:
場景 2:選擇以字母 a
結尾的姓氏。在這裡,我們將找到一個字串 lastname
。
SELECT lastname FROM employee WHERE lastname LIKE '%a';
輸出:
場景 3:讓我們找到以 L
開頭,以 n
結尾的 city
名稱,中間有四個字元。一個下劃線(_
)代表一個字元。
SELECT city FROM employee WHERE city LIKE 'L____n';
輸出:
你可以在此處瞭解更多萬用字元。
方法 2:使用 LOCATE()
函式查詢字串/子字串
LOCATE
函式返回子字串在字串中的第一次出現。如果無法在原始字串中找到子字串,則返回 0
。
此函式執行不區分大小寫的搜尋,這意味著 HELLO
,hello
與 LOCATE
函式相同。它與以下語法一起使用。
LOCATE(substring, string, start)
在上面給出的語法中,名為 substring 和 string 的前兩個引數是必需的,但名為 start
的第三個引數是可選的。
你可能對輸出的外觀有疑問?讓我們通過下圖瞭解。
SELECT LOCATE("hotmail", email) FROM employee;
輸出:
まとめ
我們得出結論,不同的資料庫平臺支援不同的方法。LOCATE()
,萬用字元與 MySQL 相容。
我們藉助示例瞭解了 MySQL 支援的搜尋字串或子字串的方法。並觀察輸出瞭解。