2017-01-31 3 views
-2

私はルートの最初のディレクトリをとるだけで正規表現を作成しようとしています。例えばパスからルートディレクトリを抽出する方法

/home/oracle/file1.dbf 
/home/oracle/file2.dbf 
/usr/oracle/file3.dbf 
/usr/oracle/file3.dbf 

あなたが返す必要があります:

/home 
/home 
/usr 
/usr 

私は次のクエリを試してみた:

SELECT substr(file_name,instr(file_name,'/')-1) as FILE_NAME 
FROM dba_data_files; 
+0

なぜあなたのクエリは機能しませんか? –

+0

これは正規表現を使用せず、単純な文字列関数を使用します。 regexpr_substrは正規表現の解である可能性があります – Aleksej

+0

タイトルに「正規表現」があるのはなぜですか?これは2つの理由でうまくいきません。まず、正規表現を使わないほうが、より効率的な解決策があります(MT0が示すように)。第二に、あなたのタイトルは、あなたが念頭に置いている解決策ではなく、あなたが解決しようとしている問題を常に記述すべきです。 (この場合は、とにかく正規表現を使用しませんでしたが、たとえそれがあったとしても...) "パスからルートディレクトリを抽出する方法"のようなタイトルははるかに意味があり、特定のアプローチを使用する必要があります。 – mathguy

答えて

1

構文はSUBSTR(string, start_position, substring_length)あるので、あなたがから始めたいです最初の文字と長さはスラッシュ文字が2番目に出現する位置です。使用して見つけたINSTR(string, substring, start_position, occurrence)

SELECT SUBSTR(
     file_name, 
     1, 
     INSTR(file_name, '/', 1, 2) - 1 
     ) AS root_directory 
FROM dba_data_files; 
+0

最初に 'file_name'にスラッシュを連結する方が良いかもしれません。そうしないと、解答は'/usr'のような入力で失敗します。 – mathguy

関連する問題