2 つの数字の前後に「_」が続くパス ディレクトリから部分文字列を取得する必要があります。文字列は次のようになります。
'P:\pgdfecol\71698384737978\INFENTECONTROL\2011_9_43\2011_9_46_43_29_10.ZIP'
この場合、46 に続いて 43 を取得したいと考えています。
パスは、最後のバックスラッシュの後に、次のルールに従って保存されます。
'\TablesPK_twoCharactersClassification_twoCharactersDocumentType_anything.ZIP'
分類を取得したい。問題は、テーブルの主キーが複数のフィールドである可能性があることですが、それぞれの場合に pk に含まれるフィールドの数を知っています。
私はこのようなものを得ました:
select substring(substring(substring('P:\pgdfecol\71698384737978\INFENTECONTROL\2011_9_43\2011_9_46_43_29_10.ZIP' from '([^\\]*(\.ZIP|zip))') from '([^_]*_){4}') from '[0-9]{2}')
しかし、私はもっとシンプルなものが欲しいです。
その他のケース:
'P:\pgdfecol\71698384737978\INFENTECONTROL\2011_03_46\2011_03_46_46_48_.ZIP'
(2 番目の 46 が必要です)
'P:\pgdfecol\71698384737978\INFCONTABLE\2009_05_INBP\2009_05_INBP_22_28_.ZIP'
(INBP の後に 22 が必要です)
'P:\pgdfecol\71698384737978\INFOFICIAL\2007_06_MB\2007_06_MB_29_28_.ZIP'
(29が必要です)
'P:\pgdfecol\71698384737978\ASOCIADOS\8010625\8010625_02_04_20110111.ZIP'
(02 8010625以降)
最後のケースでは、pk は 1 つのフィールドだけなので、文を次のように変更しました。
select substring(substring(substring('P:\pgdfecol\71698384737978\ASOCIADOS\8010625\8010625_02_04_20110111.ZIP' from '([^\\]*(\.ZIP|zip))') from '([^_]*_){2}') from '[0-9]{2}')
1 Pk の場合は の 2 番目のセットが必要であり、([^_]*_)
3 の場合は 4 番目のセットが必要です。
select substring(substring(substring('P:\pgdfecol\71698384737978\ACTASCOMITE\ACRE123\ACRE123_17_11_.ZIP' from '([^\\]*(\.ZIP|zip))') from '([^_]*_){2}') from '[0-9]{2}')
(私は17を取得します)
私はpostgres 9.0を使用しています。