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
广告