用于从特定字符串中提取数字的Mysql正则表达式或函数

用于从特定字符串中提取数字的Mysql正则表达式或函数,mysql,sql,regex,Mysql,Sql,Regex,我有一个列,其中包含以下形式的值: AB232/10D20 A232/10D20 232/10D20 如何在mysql中提取这三个数字?我想分别获取232、10和20,然后将它们插入其他列中 例如,如果包含这些值的列被称为original\u column,则我需要的查询如下: update mytable set number_one = something(original_column), number_two = something2(original_column), number_

我有一个列,其中包含以下形式的值:

AB232/10D20
A232/10D20
232/10D20
如何在mysql中提取这三个数字?我想分别获取
232
10
20
,然后将它们插入其他列中

例如,如果包含这些值的列被称为
original\u column
,则我需要的查询如下:

update mytable
set number_one = something(original_column),
number_two = something2(original_column),
number_three = something3(original_column)

使用正则表达式拆分时,请使用组功能。使用非数字分隔符(仅限整数)拆分3个数字的正则表达式

([0-9])[^0-9]([0-9])[^0-9]([0-9]*)


使用a来改进正则表达式。

中间数字很简单。最后一个数字和第一个数字非常简单,如果我们假设它们总是3和2个字符

update mytable
    set number_one = right(substring_index(original_column, '/', 1), 3),
        number_two = substring_index(original_column, '/', -1) + 0,
        number_three = right(original_column, 2);

如果列的长度不完全相同,则可以使用其他技巧。但在您的示例中,所有值的长度都相同。

请使用和函数尝试以下查询:

UPDATE mytable
SET number_one = SUBSTRING(original_column, LOCATE('/', original_column) - 3, 3),
    number_two = SUBSTRING(original_column, LOCATE('/', original_column) + 1, 2),
    number_three = SUBSTRING(original_column, -2, 2)

字符串格式是否一致?或者你可以有其他的组合吗?是的,它是一致的。这就是我的格式。在MySQL中这真的不容易,解析任意字符串非常糟糕。如果您可以访问任何脚本语言,PHP、Perl、Python、Ruby、Node.js、Java等等,这将比使用MySQL更容易。啊,考虑到从PHP访问MySQL的用例-该场景没有准确描述,为了了解MySQL数据库是如何使用的……我直接查询MySQL服务器。