我正在尝试使用Oracle SQL Developer中的regexp_substr和instr从我的数据库中取一个值,然后从右到左转到第一个“/”,然后使用右边的值。
table name: access_log
col name: download
value: Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf
我试图最终得到该值的 03_28_54_9_0000011856.pdf 部分。我有以下SQL:
select regexp_substr(download, '(.*)/', instr(download,'/',1,4)+1,1,'i',1)
from access_log;
但是我在SQL Developer中遇到以下错误:
ORA-00939: too many arguments for function
00939. 00000 - "too many arguments for function"
*Cause:
*Action:
有人可以告诉我为什么我会收到此错误以及如何使这项工作
答案 0 :(得分:2)
instr
和regexp_substr
组合看起来非常复杂。在最后一次斜线之后你想要一切吗?找到更简单答案的关键是一种通常有助于正则表达式的技术:如果问题看起来很难,则将其反转。不要考虑你想要保留什么,而要考虑你想要摆脱的东西。
在这种情况下,你想要删除所有内容,包括最后一个斜杠,这是一个非常简单的正则表达式:.*/
所以只需匹配并用空字符串替换它。
regexp_replace(download, '.*/', '')
答案 1 :(得分:2)
移动目标职位:
SELECT REGEXP_REPLACE('file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf', '^.*/(.*)/.*$', '\1') FROM DUAL;