MySQL SUBSTRING_INDEX() 函式



MySQL 的SUBSTRING_INDEX()函式接受一個字串值、一個分隔符和一個表示分隔符出現次數的數值(例如 N)作為引數。它返回從給定字串的左端開始到指定分隔符的Nth 次出現的子字串。

如果將負值作為第三個引數 (N) 傳遞,則生成的子字串將從給定字串的右端開始,從指定 (N) 個分隔符出現之後開始。

語法

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

SUBSTRING_INDEX(str,delim,N)

引數

此函式採用字串值、分隔符和計數作為引數。

返回值

此函式返回輸入字串中在指定分隔符出現次數之前的子字串。

示例

在以下示例中,我們提取到分隔符“ ”的第 3 次出現的子字串:

SELECT SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', 3);

以上程式碼的輸出如下:

SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', 3)
Hello how are

示例

您還可以將負值作為此函式的第三個引數 (N) 傳遞。如果這樣做,則生成的子字串將從給定字串的右端開始,從指定 (N) 個給定分隔符出現之後開始:

SELECT SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', -3);

獲得的輸出如下:

SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', -3)
welcome to Tutorialspoint

示例

您還可以將數值(以字串形式)作為此函式的第一個引數傳遞:

SELECT SUBSTRING_INDEX('6486582-654045-7493-7830-3693_4333', '-', 3);

產生的結果如下:

SUBSTRING_INDEX('6486582-654045-7493-7830-3693_4333', '-', 3)
6486582-654045-7493

示例

如果任何給定引數為 NULL,則函式返回 NULL:

SELECT SUBSTRING_INDEX(NULL, '.', -2);

產生的結果如下所示:

SUBSTRING_INDEX(NULL, '.', -2)
NULL

示例

如果作為第三個 (N) 引數的值傳遞的引數為 0,則函式返回空字串:

SELECT SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', 0);

以上程式碼的輸出如下:

SUBSTRING_INDEX('Hello how are you welcome to Tutorialspoint', ' ', 0)

示例

讓我們建立一個名為“DISPATCHES”的表,並使用 CREATE 和 INSERT 語句向其中插入記錄,如下所示:

CREATE TABLE DISPATCHES(
   ProductName VARCHAR(255), 
   CustomerName VARCHAR(255), 
   Price INT, 
   Location VARCHAR(255),
   DispatchTimeStamp timestamp
);

現在,讓我們使用 INSERT 語句向其中插入記錄:

INSERT INTO DISPATCHES VALUES 
('Key-Board', 'Raja', 7000, 'Hyderabad', TIMESTAMP('2019-05-04 15-02-45')),
('Earphones', 'Roja', 2000, 'Vishakhapatnam', TIMESTAMP('2019-06-26 14-13-12')),
('Mouse', 'Puja', 3000, 'Vijayawada', TIMESTAMP('2019-12-07 07-50-37')),
('Mobile', 'Vanaja', 9000, 'Chennai', TIMESTAMP('2018-03-21 16-00-45')),
('Headset', 'Jalaja', 6000, 'Goa', TIMESTAMP('2018-12-30 10-49-27')),
('Watch', 'Rajan', 4000, 'Chennai', TIMESTAMP('2019-04-21 14-17-02'));

獲得的 DISPATCHES 表如下:

ProductName CustomerName Price Location DispatchTimeStamp
Key-Board Raja 7000 Hyderabad 2019-05-04 15:02:45
Earphones Roja 2000 Vishakhapatnam 2019-06-26 14:13:12
Mouse Puja 3000 Vijayawada 2019-12-07 07:50:37
Mobile Vanaja 9000 Chennai 2018-03-21 16:00:45
Headset Jalaja 6000 Goa 2018-12-30 10:49:27
Watch Rajan 4000 Chennai 2019-04-21 14:17:02

以下查詢從“DispatchTimeStamp”列中提取到第 2 個“-”出現的子字串:

SELECT ProductName, Price, DispatchTimeStamp, SUBSTRING_INDEX(DispatchTimeStamp, '-', 2) as Result 
FROM DISPATCHES;

輸出

執行以上程式碼後,我們將獲得以下輸出:

ProductName Price DispatchTimeStamp 結果
Key-Board 7000 2019-05-04 15:02:45 2019-05
Earphones 2000 2019-06-26 14:13:12 2019-06
Mouse 3000 2019-12-07 07:50:37 2019-12
Mobile 9000 2018-03-21 16:00:45 2018-03
Headset 6000 2018-12-30 10:49:27 2018-12
Watch 4000 2019-04-21 14:17:02 2019-04

示例

以下查詢從“DispatchTimeStamp”中提取最後一個“-”之後出現的子字串:

SELECT ProductName, Price, DispatchTimeStamp, SUBSTRING_INDEX(DispatchTimeStamp, '-', -1) as Result 
FROM DISPATCHES;

輸出

執行以上程式碼後,我們將獲得以下輸出:

ProductName Price DispatchTimeStamp 結果
Key-Board 7000 2019-05-04 15:02:45 04 15:02:45
Earphones 2000 2019-06-26 14:13:12 26 14:13:12
Mouse 3000 2019-12-07 07:50:37 07 07:50:37
Mobile 9000 2018-03-21 16:00:45 21 16:00:45
Headset 6000 2018-12-30 10:49:27 30 10:49:27
Watch 4000 2019-04-21 14:17:02 21 14:17:02
mysql-substring-index-function.htm
廣告