REGEXP_SUBSTR 匹配后删除所有字符

REGEXP_SUBSTR Remove All Chars after the Match

我正在尝试从用户评论中提取工作周,用户评论可能像

“WW15 目标完成”

“WW12.3 很高兴”

目前我的脚本正在抓取匹配项以及匹配项之后的所有内容,

结果 = WW12.3 一切顺利

理想的结果就是 WW12.3 部分。

我需要在 REGEXP 上学习课程并观看演示,但不幸的是,那是另一天。

SELECT 
  BATCH, OPERATOR, COMMENTS, TXN_DATE
 ,REGEXP_SUBSTR(COMMENTS,'WW[^;]+') as ETA
FROM F_LOTCOMMENTHIST

我也试过这样做以删除 space 之后的所有内容,但它不起作用:

SELECT 
  BATCH, OPERATOR, COMMENTS, TXN_DATE
 ,REPLACE(REGEXP_SUBSTR(COMMENTS,'WW[^;]+'),' [^;]+','') as ETA
FROM F_LOTCOMMENTHIST

我知道我可能使用了错误的模式字符串,但在查看示例表时我无法弄清楚我需要什么:

https://www.techonthenet.com/oracle/functions/regexp_substr.php

这样可以吗? Oracle,虽然,我不知道db2.

SQL> with test (col) as
  2    (select 'Something WW15 Target Complete' from dual union all
  3     select 'WW12.3 Good to Go'              from dual union all
  4     select 'What is that WW1.2'             from dual
  5    )
  6  select col,
  7         regexp_substr(col, 'WW(\w+)?((\.)?(\d+))') result
  8  from test;

COL                            RESULT
------------------------------ ----------
Something WW15 Target Complete WW15
WW12.3 Good to Go              WW12.3
What is that WW1.2             WW1.2

SQL>

我建议使用正则表达式的在线测试器来学习使用它们。

例如这个:https://regexr.com/5p0m6

您可以输入您的表情和文字,您将直接看到行为。查看备忘单和解释部分。

如果你想让 WW[digits][dot][digits] 不被除 space 之外的任何字符包围(可能是),你可以像下面那样使用负面前瞻和后视(环视)。

with test (col) as
(
values 
  'SomethingWW15.3 WW12 Target Complete'
, 'WW12.3 Good to Go'
, 'WW12.3What is that WW1.2'
)
select 
  col
, regexp_substr(col, '(?<![^ ])WW[\d]+\.?[\d]?(?![^ ])') result
from test;

|COL                                 |RESULT|
|------------------------------------|------|
|SomethingWW15.3 WW12 Target Complete|WW12  |
|WW12.3 Good to Go                   |WW12.3|
|WW12.3What is that WW1.2            |WW1.2 |