SQL-提取列中的特定数字模式

时间:2019-08-20 09:18:38

标签: mysql sql

用例看起来很像这样:

Column1

Test1234
12Test5678
Test6789sample

目标是提取字符串中存在的4位数字(确保长度)并将其存储在单独的列中。情况2的情况变得更加棘手,其中字符串包含我们不感兴趣的数字。

3 个答案:

答案 0 :(得分:1)

如果您使用的是MySQL 8+,那么我们可以使用REGEXP_REPLACEREGEXP_SUBSTR分两步走。首先,我们可以去除出现 5 次或多次的所有数字组。然后,我们可以使用REGEXP_SUBSTR找到4的剩余数字组。

WITH yourTable AS (
    SELECT 'Test6789sample1234567' AS col
)

SELECT
    REGEXP_SUBSTR(REGEXP_REPLACE(col, '[0-9]{5,}', ''), '[0-9]{4}')
FROM yourTable;

这将输出:6789

Demo

答案 1 :(得分:0)

UPDATE table SET col2=REGEXP_REPLACE(col1,'^(.*[^\\d])?(\\d{4})?([^\\d].*)?$','\\2');

答案 2 :(得分:0)

在MySQL 8+中,您只需使用REGEXP_SUBSTR()

REGEXP_SUBSTR(column1, '[0-9]{4}')

这在早期版本中要棘手得多。您可能需要case

select (case when column1 regexp '^[0-9]{4}' then substr(column1, 1, 4)
             when column1 regexp '^[^0-9]{1}[0-9]{4}' then substr(column1, 2, 4)
             when column1 regexp '^[^0-9]{2}[0-9]{4}' then substr(column1, 3, 4)
             . . .   -- repeat as many times as needed             
        end)