Sql 如何在模式之前获取特定数量的字符
我的表中有如下值:Sql 如何在模式之前获取特定数量的字符,sql,oracle,Sql,Oracle,我的表中有如下值: SER : 3-576509910214, 4182 5979WM 我需要先删除空白。然后在匹配字符串出现之前或之后提取8个数字'WM'。我需要将上述值的输出设置为'41825979'。每次出现“WM”后,我需要取8个数字 WM可以出现在字符串中的任何位置 如何在Oracle SQL查询中执行此操作?这将从该字符串返回一个长度不超过8位的字符串: select replace(regexp_substr(replace(str, ' ', ''), '[0-9]{1,8}W
SER : 3-576509910214, 4182 5979WM
我需要先删除空白。然后在匹配字符串出现之前或之后提取8个数字'WM'
。我需要将上述值的输出设置为'41825979'
。每次出现“WM”后,我需要取8个数字
WM
可以出现在字符串中的任何位置
如何在Oracle SQL查询中执行此操作?这将从该字符串返回一个长度不超过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', '')
要在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
看起来不错,它在工作,+1。哦,我明白了:
8个数字在匹配字符串出现之前或之后
。亲爱的匿名者,为了帮助他人,请写清楚有什么问题。单独的向下投票是没有帮助的。这似乎对第一次出现的“WM”有效。在列的值中可以多次出现“WM”。对于多次出现的搜索模式,我如何获取它。@jerry。你的问题没有提到多重匹配。这个问题完全不同,应该作为一个新问题来问。你到底是什么意思?你的标题写的是“之前”,一部分写的是“之前或之后”,第三部分写的是“之后”。