Oracle PL/SQL中是否有用于拆分文件和父目录的库函数?
给定一个文件路径,我试图在Oracle PL/SQL中分离文件名和父目录。我想知道PL/SQL库中是否已经有了一个可用的函数。如果您使用的是10g或更高版本,那么它就需要一些正则表达式精处理,这取决于您的操作系统,可能如下所示:Oracle PL/SQL中是否有用于拆分文件和父目录的库函数?,oracle,plsql,Oracle,Plsql,给定一个文件路径,我试图在Oracle PL/SQL中分离文件名和父目录。我想知道PL/SQL库中是否已经有了一个可用的函数。如果您使用的是10g或更高版本,那么它就需要一些正则表达式精处理,这取决于您的操作系统,可能如下所示: with filepaths as ( select '/home/oracle/somedir/blah.sql' as linux , 'c:\home\oracle\somedir\blah.sql' as windows from du
with filepaths as (
select '/home/oracle/somedir/blah.sql' as linux
, 'c:\home\oracle\somedir\blah.sql' as windows
from dual
)
select regexp_substr(linux, '[^/]+', 1
, regexp_count(linux,'/')) as linux
, regexp_substr(windows, '[^\]+', 1
, regexp_count(windows,'[^\]+')) as windows
from filepaths
;
LINUX WINDOWS
-------- --------
blah.sql blah.sql
WITH filepaths AS
(SELECT '/home/oracle/somedir/blah.sql' AS LINUX,
'c:\home\oracle\somedir\blah.sql' AS WINDOWS
FROM DUAL)
SELECT LINUX,
SUBSTR(LINUX, 1, INSTR(LINUX, '/', -1)) AS LINUX_PATH,
SUBSTR(LINUX, INSTR(LINUX, '/', -1)+1) AS LINUX_FILE,
WINDOWS,
SUBSTR(WINDOWS, 1, INSTR(WINDOWS, '\', -1)) AS WINDOWS_PATH,
SUBSTR(WINDOWS, INSTR(WINDOWS, '\', -1)+1) AS WINDOWS_FILE
FROM filepaths;
LINUX /home/oracle/somedir/blah.sql
LINUX_PATH /home/oracle/somedir/
LINUX_FILE blah.sql
WINDOWS c:\home\oracle\somedir\blah.sql
WINDOWS_PATH c:\home\oracle\somedir\
WINDOWS_FILE blah.sql
如果您使用的是10g或更高版本,那么就没有真正的需要,只需要对正则表达式进行一点微调,这取决于您的操作系统,可能如下所示:
with filepaths as (
select '/home/oracle/somedir/blah.sql' as linux
, 'c:\home\oracle\somedir\blah.sql' as windows
from dual
)
select regexp_substr(linux, '[^/]+', 1
, regexp_count(linux,'/')) as linux
, regexp_substr(windows, '[^\]+', 1
, regexp_count(windows,'[^\]+')) as windows
from filepaths
;
LINUX WINDOWS
-------- --------
blah.sql blah.sql
WITH filepaths AS
(SELECT '/home/oracle/somedir/blah.sql' AS LINUX,
'c:\home\oracle\somedir\blah.sql' AS WINDOWS
FROM DUAL)
SELECT LINUX,
SUBSTR(LINUX, 1, INSTR(LINUX, '/', -1)) AS LINUX_PATH,
SUBSTR(LINUX, INSTR(LINUX, '/', -1)+1) AS LINUX_FILE,
WINDOWS,
SUBSTR(WINDOWS, 1, INSTR(WINDOWS, '\', -1)) AS WINDOWS_PATH,
SUBSTR(WINDOWS, INSTR(WINDOWS, '\', -1)+1) AS WINDOWS_FILE
FROM filepaths;
LINUX /home/oracle/somedir/blah.sql
LINUX_PATH /home/oracle/somedir/
LINUX_FILE blah.sql
WINDOWS c:\home\oracle\somedir\blah.sql
WINDOWS_PATH c:\home\oracle\somedir\
WINDOWS_FILE blah.sql
INSTR和SUBSTR字符串函数可用于执行此操作,如下所示:
with filepaths as (
select '/home/oracle/somedir/blah.sql' as linux
, 'c:\home\oracle\somedir\blah.sql' as windows
from dual
)
select regexp_substr(linux, '[^/]+', 1
, regexp_count(linux,'/')) as linux
, regexp_substr(windows, '[^\]+', 1
, regexp_count(windows,'[^\]+')) as windows
from filepaths
;
LINUX WINDOWS
-------- --------
blah.sql blah.sql
WITH filepaths AS
(SELECT '/home/oracle/somedir/blah.sql' AS LINUX,
'c:\home\oracle\somedir\blah.sql' AS WINDOWS
FROM DUAL)
SELECT LINUX,
SUBSTR(LINUX, 1, INSTR(LINUX, '/', -1)) AS LINUX_PATH,
SUBSTR(LINUX, INSTR(LINUX, '/', -1)+1) AS LINUX_FILE,
WINDOWS,
SUBSTR(WINDOWS, 1, INSTR(WINDOWS, '\', -1)) AS WINDOWS_PATH,
SUBSTR(WINDOWS, INSTR(WINDOWS, '\', -1)+1) AS WINDOWS_FILE
FROM filepaths;
LINUX /home/oracle/somedir/blah.sql
LINUX_PATH /home/oracle/somedir/
LINUX_FILE blah.sql
WINDOWS c:\home\oracle\somedir\blah.sql
WINDOWS_PATH c:\home\oracle\somedir\
WINDOWS_FILE blah.sql
共享和享受。可以使用INSTR和SUBSTR字符串函数来完成此操作,如下所示:
with filepaths as (
select '/home/oracle/somedir/blah.sql' as linux
, 'c:\home\oracle\somedir\blah.sql' as windows
from dual
)
select regexp_substr(linux, '[^/]+', 1
, regexp_count(linux,'/')) as linux
, regexp_substr(windows, '[^\]+', 1
, regexp_count(windows,'[^\]+')) as windows
from filepaths
;
LINUX WINDOWS
-------- --------
blah.sql blah.sql
WITH filepaths AS
(SELECT '/home/oracle/somedir/blah.sql' AS LINUX,
'c:\home\oracle\somedir\blah.sql' AS WINDOWS
FROM DUAL)
SELECT LINUX,
SUBSTR(LINUX, 1, INSTR(LINUX, '/', -1)) AS LINUX_PATH,
SUBSTR(LINUX, INSTR(LINUX, '/', -1)+1) AS LINUX_FILE,
WINDOWS,
SUBSTR(WINDOWS, 1, INSTR(WINDOWS, '\', -1)) AS WINDOWS_PATH,
SUBSTR(WINDOWS, INSTR(WINDOWS, '\', -1)+1) AS WINDOWS_FILE
FROM filepaths;
LINUX /home/oracle/somedir/blah.sql
LINUX_PATH /home/oracle/somedir/
LINUX_FILE blah.sql
WINDOWS c:\home\oracle\somedir\blah.sql
WINDOWS_PATH c:\home\oracle\somedir\
WINDOWS_FILE blah.sql
分享和享受。非常相似(如果没有重复)问题:非常相似(如果没有重复)问题: