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>
我建议使用正则表达式的在线测试器来学习使用它们。
您可以输入您的表情和文字,您将直接看到行为。查看备忘单和解释部分。
如果你想让 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 |
我正在尝试从用户评论中提取工作周,用户评论可能像
“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>
我建议使用正则表达式的在线测试器来学习使用它们。
您可以输入您的表情和文字,您将直接看到行为。查看备忘单和解释部分。
如果你想让 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 |