【问题标题】:oracle get all matched occurrences from a columnoracle 从列中获取所有匹配的匹配项
【发布时间】:2019-01-30 19:59:32
【问题描述】:

我有一个表,它有 2 列:ID 和 JOB_Description(Text)。 我想编写一个 oracle SQL 来提取 与常规模式匹配的描述列。

但是,我已经学会了如何从具有以下 SQL 的字符串中提取匹配的子字符串,但我不知道将以下 SQL 一次性应用于上述表(列:JOB_Description)上的所有数据。

SQL 从字符串中获取所有匹配的匹配项:

 SELECT REGEXP_SUBSTR(JOB_Description, '(ABC|DE)([[:digit:]]){5}', 1, LEVEL) AS substr
   FROM (
         select 'Please help to repair ABC12345, DE22222' as JOB_Description 
          from DUAL)
  CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|DE)([[:digit:]]){5}');

【问题讨论】:

  • 只需将内部查询中的字符串替换为列名即可。
  • @VamsiPrabhala 在这种情况下不会这样做,因为 CONNECT BY
  • 你有一个额外的独特的列吗?还是职位描述独一无二?
  • ID 是唯一的,谢谢

标签: sql regex oracle regexp-substr


【解决方案1】:

你可以试试这个查询。

 with test as(
  select 'ABC12345, DE22222' as JOB_Description from DUAL union
  select 'Please help to repair ABC12345, DE22222' as JOB_Description from DUAL 
)
SELECT REGEXP_SUBSTR(JOB_Description, '(ABC|DE)([[:digit:]]){5}', 1, LEVEL) AS substr
FROM test
CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|DE)([[:digit:]]){5}')
  AND PRIOR JOB_Description = JOB_Description
  AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

结果:

ABC12345
DE22222
ABC12345
DE22222

最后两行很好的解释可以找到here

【讨论】:

  • JOB_Description = JOB_Description?
  • @MemoryLeak 我添加了一个链接,其中包含已经详细的答案
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多