首页 > 解决方案 > Oracle正则表达式匹配列值的多个部分

问题描述

想象一下,我有以下包含 2 列的数据库表

row1  AA.B.HOME.CCC.N111.DDDD
row2  RRR.BCD.HOME.CCC.N222.DDDD
row3  AAAA.B.WORK.EEEEE.N111.GGGGG
row4  AA.B.WORK.FFFF.N222.TT

我需要一个在输入中给出“HOME”和“111”的查询,只需要返回“row1”结果。

点的数量是固定的,但每个块的长度可以是可变的。“N111”程序段始终以 N 开头。

是否可以使用 Oracle 正则表达式?如果有一千行,它会有多重?

标签: regexoracle

解决方案


您可以尝试如下查询。对于 1000 行,它应该执行得非常快。

WITH
    sample_data (col1, col2)
    AS
        (SELECT 'row1', 'AA.B.HOME.CCC.N111.DDDD' FROM DUAL
         UNION ALL
         SELECT 'row2', 'RRR.BCD.HOME.CCC.N222.DDDD' FROM DUAL
         UNION ALL
         SELECT 'row3', 'AAAA.B.WORK.EEEEE.N111.GGGGG' FROM DUAL
         UNION ALL
         SELECT 'row4', 'AA.B.WORK.FFFF.N222.TT' FROM DUAL)
SELECT *
  FROM sample_data
 WHERE REGEXP_LIKE (col2, '\.HOME\..*\.N111\.');

推荐阅读