PostgreSQL SELECTクエリで文字「/」の後の文字列を抽出したいのですが。
フィールド名はsource_path
、テーブル名はmovies_history
。
データの例:
Source_pathの値:
などなど。 source_pathのすべての値はこの形式です
「file.xxx」文字列のみを取得する必要があります。
あなたのケースがそんなに単純な場合(exactlyone _/
_ in the string)use split_part()
:
_SELECT split_part(source_path, '/', 2) ...
_
Ifmultiple_/
_があり、last1つ、シンプルで高速なソリューションは、文字列を reverse()
で逆方向に処理し、最初の部分を取り、reverse()
2回目:
_SELECT reverse(split_part(reverse(source_path), '/', 1)) ...
_
または正規表現を使用して、より用途の広い(そしてより高価な) substring()
を使用できます。
_SELECT substring(source_path, '[^/]*$') ...
_
説明:
_[...]
_ ..文字のリストを囲んで文字クラスを形成します。
_[^...]
_ ..リストが_^
_で始まる場合は、inversionです(リストにないすべての文字)。
_*
_ .. 0-n回の数量詞。
_$
_ ..文字列の末尾へのアンカー。
substring 関数を使用する必要があります
SELECT substring('1245487/filename.mov' from '%/#"%#"%' for '#');
説明:
%/
つまり、%
のテキストとその後の/
#"%#"
各#
は、最後の部分for '#'
で定義されたプレースホルダーであり、必要と追加の"
したがって、<placeholder> % <placeholder>
があり、関数は両方のプレースホルダー内で見つかったものを返します。この場合は%
または/
の後の残りの文字列です。
最終クエリ:
SELECT substring(source_path from '%/#"%#"%' for '#');
FROM movies_history