0

基本的に、問題は次のような SELECT ステートメントがあることです。

SELECT sys_connect_by_path(name, '/')

次のような出力が得られます。

/必要なフォルダの名前/別のフォルダ...../探しているフォルダ

そして、すべてを切り取って、最初のフォルダーの名前だけにしたいと思います。これを行うための最良の方法は何ですか?

4

2 に答える 2

0

UNIX に似たファイル パス (ディレクトリ、場合によってはファイル) のリストを含むファイル テーブルがある場合は、次のようなクエリを使用して、ファイル マネージャーの表示として結果を取得できます。

SELECT f.file_path,
  SUBSTR(f.file_path, 1, INSTR(f.file_path, '/', -2)) AS parent_file_path
  FROM files_tbl f 
  START WITH (f.file_path = '/') -- Start with the root directory path
  CONNECT BY PRIOR f.file_path = SUBSTR(f.file_path, 1, INSTR(f.file_path, '/', -2))
  ORDER SIBLINGS BY parent_file_path ASC NULLS FIRST, f.file_path ASC;

このクエリは、ディレクトリが file_path の / で終了/終了していることを前提としていますが、ファイルはそうではありません。

/
/folder/
/folder/file.log
/folder/subfolder/
/folder/subfolder/example.txt
于 2013-10-03T20:54:20.200 に答える
0

試す:

SELECT substr(str, instr(str, '/', -1) + 1)
  FROM (
    SELECT '/Name of Folder I want/Another folder...../Folder Im looking from' AS str FROM dual
  )
;

instrの「-1」パラメータは、最後から始まる「/」文字の最初のオカレンスを返すように Oracle に指示します。

編集:すみません、間違って読みました、別の提案(醜いもの):

SELECT substr(str, 2, CASE
                        WHEN instr(str, '/', 2, 1) > 0 THEN instr(str, '/', 2, 1) - 2
                        ELSE length(str) - 1
                      END)
  FROM (
    SELECT '/Name of Folder I want/Another folder...../Folder Im looking from' AS str FROM dual
    UNION ALL
    SELECT '/Name of Folder I want' AS str FROM dual
  )
;

正規表現は別の可能な解決策を提供しますが、作業中の文字列の最後に「/」文字を連結する必要があります。

SELECT regexp_substr(str || '/', '/(.*?)/', 1, 1, NULL, 1)
  FROM (
    SELECT '/Name of Folder I want/Another folder...../Folder Im looking from' AS str FROM dual
    UNION ALL
    SELECT '/Name of Folder I want' AS str FROM dual
  )
;

ここでも部分式を利用しています。*regexp_substr* の最後のパラメーターは、最初の括弧のペア内にある文字列の一部のみを返すように Oracle に指示します。

于 2013-10-03T20:34:46.813 に答える