在 oracle 中使用 regexp_substr 提取字符串

Extract the strings using regexp_substr in oracle

我使用regexp_substr函数在oracle数据库中提取字符串。我只需要删除最后一个字符串列并打印剩余的输出。

提前致谢

原始数据文件位置

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/apps01/oradata/orcl/datafile/o1_mf_system_k45ylzb0_.dbf
/apps01/oradata/orcl/datafile/o1_mf_sysaux_k45yn2fs_.dbf
/apps01/oradata/orcl/datafile/o1_mf_undotbs1_k45ynvjz_.dbf
/apps01/oradata/orcl/datafile/o1_mf_users_k2pmzsw2_.dbf
/apps01/oradata/orcl/datafile/o1_mf_users_k45ynwlp_.dbf

我需要删除带有 *.dbf 的最后一个字符串列,类似于 linux

中的 awk

SQL:

SQL> select regexp_substr(name, '/[A-Z].*$') from v$datafile;

REGEXP_SUBSTR(NAME,'/[A-Z].*$')
--------------------------------------------------------------------------------
/orcl/datafile/o1_mf_system_k45ylzb0_.dbf
/orcl/datafile/o1_mf_sysaux_k45yn2fs_.dbf
/orcl/datafile/o1_mf_undotbs1_k45ynvjz_.dbf
/orcl/datafile/o1_mf_users_k2pmzsw2_.dbf
/orcl/datafile/o1_mf_users_k45ynwlp_.dbf

预期输出:

NAME
--------------------------------------------------------------------------------
/apps01/oradata/orcl/datafile/
/apps01/oradata/orcl/datafile/
/apps01/oradata/orcl/datafile/
/apps01/oradata/orcl/datafile/
/apps01/oradata/orcl/datafile/

您可以使用

  • SUBSTR()INSTR() 函数的组合 通过使用 -1 作为反向搜索 / 字符 INSTR()
  • 的最后一个参数

  • REGEXP_REPLACE()[^/]+$ 模式 where

    + 匹配一次或多次出现,

    $ 匹配字符串的结尾

作为第二种方法

比如

SELECT SUBSTR(name,1,INSTR(name,'/',-1)) AS method1,
       REGEXP_REPLACE(name,'[^/]+$') AS method2 
  FROM v$datafile

Demo