SQLite( or PostgreSQL)でファイルパスからファイル名だけを取得する。
SQLiteでファイルパスからファイル名を取得したくなったので調べてみました。
SQLiteにはlastIndexOfのようなものがないみたいです。
instr()で文字列の位置を検索できますが、最初の位置しか返さないのでファイル名取得には使用できません。
Oracleみたいにpositionを指定できてマイナスを指定したら文末からサーチしてくれればよかったんですけど。
困ったときはstackoverflowってことで調べてみました。
ドンピシャなQuestionがありました。
これによると以下のようにすればOKということらしいです。
select replace(filepath, rtrim(filepath, replace(filepath, '\', '')), '') from table;
ほんとにとれました。
rtrimを使うなんて凡人にはできない発想ですね。
しかも1つずつ分解して考えてもどういうことなのかよくわからない。。
まー深くは考えないことにします。
rtrim?ほんまにとれるのーと疑っているそこのアナタ。
以下のページからSQLiteを選択して以下のSQLを実行してみてください。
びっくりすることにとれます。
select replace('c:\work\subwork\hogehoge.xls', rtrim('c:\work\subwork\hogehoge.xls', replace('c:\work\subwork\hogehoge.xls', '\', '')), '');
ちなみにPostgreSQLでも同じ方法でとれました。