在 MySQL 中搜尋行以查詢子字串

Mehvish Ashiq 2023年1月30日 2022年5月13日
  1. 方法 1:使用 % 萬用字元查詢字串/子字串
  2. 方法 2:使用 LOCATE() 函式查詢字串/子字串
  3. まとめ
在 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;

輸出:

搜尋行以在 mysql - 員工表中查詢子字串

讓我們瞭解考慮使用%萬用字元搜尋行以查詢字串或子字串的不同場景。

場景 1:查詢所有 Gmail 使用者。意思是,我們必須在 email 中找到一個子字串。

SELECT firstname, lastname from employee where email LIKE '%@gmail.com';

上面的 SQL 查詢將從 email 字串包含 gmail.comemployee 表中選擇 firstnamelastname

輸出:

搜尋行以在 mysql 中查詢子字串 - 使用萬用字元查詢 gmail 使用者

場景 2:選擇以字母 a 結尾的姓氏。在這裡,我們將找到一個字串 lastname

SELECT lastname FROM employee WHERE lastname LIKE '%a';

輸出:

搜尋行以在 mysql 中查詢子字串 - 查詢以使用萬用字元結尾的姓氏

場景 3:讓我們找到以 L 開頭,以 n 結尾的 city 名稱,中間有四個字元。一個下劃線(_)代表一個字元。

SELECT city FROM employee WHERE city LIKE 'L____n';

輸出:

搜尋行以在 mysql 中查詢子字串 - 查詢城市考慮使用萬用字元以 n 開頭的結束字元

你可以在此處瞭解更多萬用字元。

方法 2:使用 LOCATE() 函式查詢字串/子字串

LOCATE 函式返回子字串在字串中的第一次出現。如果無法在原始字串中找到子字串,則返回 0

此函式執行不區分大小寫的搜尋,這意味著 HELLOhelloLOCATE 函式相同。它與以下語法一起使用。

LOCATE(substring, string, start)

在上面給出的語法中,名為 substring 和 string 的前兩個引數是必需的,但名為 start 的第三個引數是可選的。

你可能對輸出的外觀有疑問?讓我們通過下圖瞭解。

搜尋行以在 mysql 中查詢子字串 - 瞭解定位函式

SELECT LOCATE("hotmail", email) FROM employee;

輸出:

搜尋行以在 mysql 中查詢子字串 - 定位 hotmail

まとめ

我們得出結論,不同的資料庫平臺支援不同的方法。LOCATE(),萬用字元與 MySQL 相容。

我們藉助示例瞭解了 MySQL 支援的搜尋字串或子字串的方法。並觀察輸出瞭解。

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - MySQL String