MySQL 如何从MySQL查询中提取字符串中的数字值

在MySQL中,有时我们需要从一段包含数字的字符串中提取数字值。例如,我们需要从“价格:$19.99”中提取“19.99”这个数字值。在本文中,我们将介绍如何在MySQL查询中提取字符串中的数字值。

阅读更多: MySQL 教程

使用正则表达式提取数字

正则表达式是一种通用的文本匹配模式,可以用于提取字符串中的数字。在MySQL中,可以使用REGEXP函数和正则表达式来提取数字。

假设我们有以下数据表:

CREATE TABLE product (
  id int(11) NOT NULL,
  name varchar(50) NOT NULL,
  description varchar(100) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

其中,description字段包含一些商品的描述信息,例如“价格:$19.99”、“销量:1000”等等。我们想要从这个字段中提取数字值。

下面是使用正则表达式进行提取的查询语句:

SELECT description, 
       REGEXP_SUBSTR(description, '[0-9]+([.][0-9]+)?') AS extracted_number
FROM product;

在这个查询中,我们使用了REGEXP_SUBSTR函数和正则表达式“[0-9]+([.][0-9]+)?”来提取字符串中的数字值。这个正则表达式的含义是:“匹配一个或多个数字,后面可以跟一个小数点和一个或多个数字(可选)”。

在上面的查询语句中,我们将description字段和提取出来的数字值作为查询结果返回。

例如,如果description字段的值为“价格:$19.99”,那么查询结果将会是:

description extracted_number description varchar(100) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

其中,description字段包含一些商品的描述信息,例如“价格:$19.99”、“销量:1000”等等。我们想要从这个字段中提取数字值。

下面是使用SUBSTRING_INDEX函数进行提取的查询语句:

SELECT description,
       SUBSTRING_INDEX(SUBSTRING_INDEX(description, ':', -1), ' ', 1) AS extracted_number
FROM product;

在这个查询中,我们使用了SUBSTRING_INDEX函数来提取字符串中的数字值。首先,我们使用SUBSTRING_INDEX(description, ‘:’, -1)函数找到最后一个冒号后面的字符串,然后再使用SUBSTRING_INDEX函数找到空格之前的子字符串。

例如,如果description字段的值为“价格:$19.99”,那么查询结果将会是:

description extracted_number

使用CAST函数转换数据类型

如果我们需要使用提取出来的数字值进行计算或比较,需要将其转换为数值类型。在MySQL中,可以使用CAST函数将一个字符串转换为数值类型。

下面是使用CAST函数进行转换的查询语句:

SELECT description, 
       CAST(REGEXP_SUBSTR(description, '[0-9]+([.][0-9]+)?') AS DECIMAL(10,2)) AS extracted_number
FROM product;

在这个查询中,我们使用了REGEXP_SUBSTR函数和正则表达式来提取字符串中的数字值。然后使用CAST函数将提取出来的字符串转换为DECIMAL(10,2)类型的数值,其中10表示数值的总位数,2表示小数点后的位数。

例如,如果description字段的值为“价格:$19.99”,那么查询结果将会是:

description extracted_number