我表中的值如下:
SER : 3-576509910214, 4182 5979WM
我需要先删除空格。然后在匹配字符串'WM'
出现之前或之后获取8个数字。我需要上述值的输出为'41825979'
。每次出现“ WM”后,我都需要提取8个数字。
WM
可以出现在字符串中的任何位置。
如何在Oracle SQL查询中做到这一点?
答案 0 :(得分:1)
这将从这样的字符串返回最长为8的数字字符串:
select replace(regexp_substr(replace(str, ' ', ''), '[0-9]{1,8}WM'), 'WM', '')
如果要在之前和之后,只需修改模式:
select replace(regexp_substr(replace(str, ' ', ''), '[0-9]{1,8}WM|WM[0-9]{1-8}'), 'WM', '')
答案 1 :(得分:0)
要在WM之前或之后(除去空格后)输入8位数字,请使用以下代码:
WITH Demo(t) AS
(
SELECT 'SER : 3-576509910214, 4182 5979WM' FROM dual
UNION ALL
SELECT 'SER : 3-576509910214, 4182 5 979 WM' FROM dual
UNION ALL
SELECT 'SER : 3-576509910214,WM 4182 5979' FROM dual
)
SELECT
REPLACE(COALESCE(
REGEXP_SUBSTR(REPLACE(t, ' ', ''), '[0-9]{8}WM'),
REGEXP_SUBSTR(REPLACE(t, ' ', ''), 'WM[0-9]{8}')
), 'WM', '')
FROM Demo