1

我在数据库表中有一个字段,格式为:

111_2222_33333,222_444_3,aaa_bbb_ccc

这是格式对整个领域都是统一的。三个下划线分隔的数值,一个逗号,另外三个下划线分隔的数值,另一个逗号,然后是三个下划线分隔的文本值。中间没有空格

我想从第二个数字序列中提取中间值,在上面的例子中我想得到444

在我继承的 SQL 查询中,使用的正则表达式 is^.,(\d+)_.$但这似乎没有做任何事情。

我试图识别第一个逗号,后面的第一个数字和下面的下划线,222_作为起点,然后从那里得到下一个没有_后面的数字

这是我得到的最接近的(,\d*_)(\d+[^_])选择,222_444

4

1 回答 1

0

我们可以尝试使用REGEXP_REPLACE捕获组:

SELECT
    REGEXP_REPLACE( 
        '111_2222_33333,222_444_3,aaa_bbb_ccc',
        '^[^,]+,[^_]+_(.*?)_[^_]+,.*$',
        '\1') AS num
FROM yourTable;

这是一个演示,显示上述正则表达式的第一个捕获组包含您想要的数量。

演示

于 2020-01-15T13:03:13.847 回答