ファイル パスを指定すると、Oracle PL/SQL でファイル名と親ディレクトリを分離しようとしています。PL/SQLライブラリで使用可能な関数がすでに存在するかどうか疑問に思っています
1633 次
2 に答える
3
実際の必要性はありません。10g 以降を使用している場合は、OS によっては次のように、正規表現を少し調整するだけで済みます。
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
于 2012-08-09T17:08:48.167 に答える
1
次のように、INSTR および SUBSTR 文字列関数を使用してこれを行うことができます。
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
共有してお楽しみください。
于 2012-08-10T17:01:13.483 に答える