oracle (12c) regexp_substr 拆分文件名和目录名
oracle (12c) regexp_substr to split filename and directoryname
使用 Oracle 12c,我想将包含完整文件名(包括目录)的字符串拆分为 2 个字符串:第一个是目录,第二个是文件名。
我已经有了文件名,但无法正确提取目录:
select
val,
regexp_substr(val, '[^/]+/[^/]+', 1, 1) as dirname,
regexp_substr(val, '[^/]+$', 1, 1) as filename
from (select '/a/b/c/d/e/f/file.ext' as val from dual) t
这给出:
dirname = a/b -- This is my purpose...
filename = file.ext -- This is correct !
我想将目录名设为
/a/b/c/d/e/f
包括第一个“/”
注意:我不想分成几行(使用逐句连接)。
我需要用 2 个单独的字符串得到一行...
谢谢...
我们可以尝试使用 REGEXP_SUBSTR
和 REGEXP_REPLACE
如下:
SELECT
REGEXP_REPLACE(val, '/[^/]*$', '') AS path,
REGEXP_SUBSTR(val, '[^/]+$') AS filename
FROM yourTable;
这里的基本策略是把最后一个斜杠去掉,然后全部去掉,得到目录路径,反之得到文件名。
您不需要(慢速)正则表达式,只需使用 SUBSTR
和 INSTR
:
Oracle 设置:
CREATE TABLE test_data ( val ) AS
SELECT '/a/b/c/d/e/f/file.ext' FROM DUAL;
查询:
SELECT SUBSTR( val, 1, INSTR( val, '/', -1 ) ) AS dir,
SUBSTR( val, INSTR( val, '/', -1 ) + 1 ) AS filename
FROM test_data;
输出:
DIR | FILENAME
:------------ | :-------
/a/b/c/d/e/f/ | file.ext
db<>fiddle here
使用 Oracle 12c,我想将包含完整文件名(包括目录)的字符串拆分为 2 个字符串:第一个是目录,第二个是文件名。
我已经有了文件名,但无法正确提取目录:
select
val,
regexp_substr(val, '[^/]+/[^/]+', 1, 1) as dirname,
regexp_substr(val, '[^/]+$', 1, 1) as filename
from (select '/a/b/c/d/e/f/file.ext' as val from dual) t
这给出:
dirname = a/b -- This is my purpose...
filename = file.ext -- This is correct !
我想将目录名设为
/a/b/c/d/e/f
包括第一个“/”
注意:我不想分成几行(使用逐句连接)。 我需要用 2 个单独的字符串得到一行...
谢谢...
我们可以尝试使用 REGEXP_SUBSTR
和 REGEXP_REPLACE
如下:
SELECT
REGEXP_REPLACE(val, '/[^/]*$', '') AS path,
REGEXP_SUBSTR(val, '[^/]+$') AS filename
FROM yourTable;
这里的基本策略是把最后一个斜杠去掉,然后全部去掉,得到目录路径,反之得到文件名。
您不需要(慢速)正则表达式,只需使用 SUBSTR
和 INSTR
:
Oracle 设置:
CREATE TABLE test_data ( val ) AS
SELECT '/a/b/c/d/e/f/file.ext' FROM DUAL;
查询:
SELECT SUBSTR( val, 1, INSTR( val, '/', -1 ) ) AS dir,
SUBSTR( val, INSTR( val, '/', -1 ) + 1 ) AS filename
FROM test_data;
输出:
DIR | FILENAME :------------ | :------- /a/b/c/d/e/f/ | file.ext
db<>fiddle here