在 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
我使用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
中的 awkSQL:
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