代码之家  ›  专栏  ›  技术社区  ›  noobie2023

什么是等价的?=在Oracle正则表达式中

  •  2
  • noobie2023  · 技术社区  · 8 年前

    我正在尝试在 regexp_substr() .

    例如,我有一个字符串 DA.*BLK 我想提取 A B . 我现在要做的是

    replace(replace(regexp_substr(target_column,'A.*B'),'A',''),'B','')` 
    

    然后我得到中间的一切。

    但我认为这种方式可能效率不高,而且不优雅。我也试着用 ?= 但甲骨文似乎不支持这样的条款。 有人能告诉我一个更好的方法来实现我的目标吗?非常感谢!

    2 回复  |  直到 8 年前
        1
  •  4
  •   Kaushik Nayak    8 年前

    REGEXP_SUBSTR('DASOMETHINGBLK','DA(.*)BLK', 1,1,NULL,1)
                   --                           ^ ^      ^
                   --starting from first, find first     1st match bet'n ()
    

    http://sqlfiddle.com/#!4/97eade/967

        2
  •  1
  •   MT0    8 年前

    LIKE

    CREATE TABLE table_name ( id, column_name ) AS
      SELECT 1, 'dablk' FROM DUAL UNION ALL
      SELECT 2, 'datestblk' FROM DUAL UNION ALL
      SELECT 3, 'atestblk' FROM DUAL UNION ALL
      SELECT 4, 'datestbl' FROM DUAL UNION ALL
      SELECT 5, 'dadatestblkblk' FROM DUAL;
    

    da blk

    SELECT id,
           SUBSTR( column_name, 3, LENGTH( column_name ) - 5 )
    FROM   table_name
    WHERE  column_name LIKE 'da%blk';
    

    ID | SUBSTR(COLUMN_NAME,3,LENGTH(COLUMN_NAME)-5)
    ---|--------------------------------------------
     1 | (null)
     2 | test
     5 | datestblk
    

    a b

    SELECT id,
           SUBSTR(
             column_name,
             first_a + 1,
             last_b - first_a - 1
           ) AS value
    FROM   (
      SELECT t.*,
             INSTR( column_name, 'a' ) AS first_a,
             INSTR( column_name, 'b', -1 ) AS last_b
      FROM   table_name t
      WHERE  column_name LIKE '%a%b%'
    )
    

    ID | VALUE    
    ---|----------
     1 | (null)
     2 | test     
     3 | test     
     4 | test     
     5 | datestblk
    

    here