📜  mysql 在字符串中取数字 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:06.334000             🧑  作者: Mango

MySQL 在字符串中取数字 - SQL

在MySQL中,我们经常需要从字符串中提取数字,以进行一些计算或比较操作。本文将介绍如何在MySQL中提取字符串中的数字。

使用正则表达式

正则表达式是一种强大的匹配模式,可以用于从字符串中提取数字。MySQL中支持正则表达式操作符REGEXPRLIKE

使用REGEXP

使用REGEXP操作符,我们可以使用正则表达式匹配字符串中的数字。下面的查询可以从字符串中提取数字:

SELECT REGEXP_REPLACE('abc123def456ghi789', '[^0-9]+', '') AS numbers;

输出:

+---------+
| numbers |
+---------+
| 123456789 |
+---------+

这个查询使用了REGEXP_REPLACE函数,它接受三个参数,分别是待替换的字符串、匹配模式和替换后的字符串。其中,匹配模式[^0-9]+表示匹配字符串中不是数字的部分,替换为空字符串,即删去。

使用RLIKE

RLIKE操作符也可以使用正则表达式匹配字符串中的数字。下面的查询可以从字符串中提取数字:

SELECT REPLACE('abc123def456ghi789' REGEXP '([^0-9])+', '') AS numbers;

输出:

+---------+
| numbers |
+---------+
| 123456789 |
+---------+

这个查询使用了REPLACE函数,它接受三个参数,分别是待替换的字符串、匹配模式和替换后的字符串。其中,匹配模式([^0-9])+表示匹配字符串中不是数字的部分,替换为空字符串,即删去。注意,在RLIKE操作符中,匹配模式无需用/.../包围。

使用SUBSTRING_INDEX函数

SUBSTRING_INDEX函数可以用于从字符串中提取指定位置之前或之后的子字符串。与正则表达式不同,它不依赖于匹配模式,需要指定字符串中数字的位置。

下面的查询可以从字符串中提取数字:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('abc123def456ghi789', ' ', -1), ' ', 1) AS numbers;

输出:

+---------+
| numbers |
+---------+
| 123456789 |
+---------+

这个查询使用了两次SUBSTRING_INDEX函数,第一次提取最后一个空格之后的子字符串,第二次提取第一个空格之前的子字符串,即为数字。

使用CAST函数

CAST函数可以将字符串转换为数字类型。如果字符串中不包含数字,则返回0。

下面的查询可以从字符串中提取数字:

SELECT CAST('abc123def456ghi789' AS UNSIGNED) AS numbers;

输出:

+---------+
| numbers |
+---------+
| 123456789 |
+---------+

这个查询使用了CAST函数进行类型转换。UNSIGNED表示无符号整数,如果字符串中包含非数字字符,则返回0。注意,在MySQL中,CAST函数是一个通用函数,支持多种数据类型的转换。

总结

本文介绍了在MySQL中提取字符串中数字的多种方法,包括正则表达式、SUBSTRING_INDEX函数和CAST函数。不同的方法适用于不同的场景,需要根据具体情况选择合适的方法。