You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL:如何从列中提取指定目标词汇?

Oracle SQL提取指定目标词汇的解决方案

方法1:正则表达式替换(快速实现)

如果目标词汇固定,可通过两次正则替换先移除非目标词汇,再清理多余空格:

SELECT 
  TRIM(
    REGEXP_REPLACE(
      REGEXP_REPLACE(
        description,
        -- 匹配所有非目标词汇的完整单词
        '(^|\s)(?!MENACE|MORT|VIOLENCES|CONJOINT)(\S+)',
        ''
      ),
      -- 替换多个连续空格为单个空格
      '\s+',
      ' '
    )
  ) AS extracted_terms
FROM your_table;
  • 将括号内的MENACE|MORT|VIOLENCES|CONJOINT替换为你的50个目标词汇,用竖线|分隔即可。
  • 正则中的(^|\s)确保匹配完整单词,避免部分字符误匹配。

方法2:拆分单词+过滤拼接(易维护)

针对大量目标词汇(如50个),推荐用这种方式,目标词汇集中维护,逻辑更清晰:

-- 定义需要提取的目标词汇列表
WITH target_terms AS (
  SELECT 'MENACE' AS term FROM DUAL UNION ALL
  SELECT 'MORT' AS term FROM DUAL UNION ALL
  SELECT 'VIOLENCES' AS term FROM DUAL UNION ALL
  SELECT 'CONJOINT' AS term FROM DUAL
  -- 继续添加剩余46个目标词汇,每个用UNION ALL连接
),
-- 拆分原字段中的每个单词
split_words AS (
  SELECT 
    t.id, -- 替换为你的表的唯一标识字段(如主键),无唯一标识可用ROWID代替
    REGEXP_SUBSTR(t.description, '\S+', 1, LEVEL) AS word
  FROM your_table t
  CONNECT BY LEVEL <= REGEXP_COUNT(t.description, '\S+')
    AND PRIOR t.id = t.id
    AND PRIOR SYS_GUID() IS NOT NULL -- 防止递归循环
)
-- 过滤目标词汇并拼接成字符串
SELECT 
  sw.id,
  LISTAGG(tt.term, ' ') WITHIN GROUP (ORDER BY sw.word) AS extracted_terms
FROM split_words sw
JOIN target_terms tt ON sw.word = tt.term
GROUP BY sw.id;
  • 优势:目标词汇集中在target_terms中,增删词汇只需修改该部分,无需调整正则,降低出错概率。

内容的提问来源于stack exchange,提问作者pfroide4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:07:32