用例看起来很像这样:
Column1
Test1234
12Test5678
Test6789sample
目标是提取字符串中存在的4位数字(确保长度)并将其存储在单独的列中。情况2的情况变得更加棘手,其中字符串包含我们不感兴趣的数字。
答案 0 :(得分:1)
如果您使用的是MySQL 8+,那么我们可以使用REGEXP_REPLACE
和REGEXP_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
答案 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)