我需要从一个路径目录中获取一个子字符串,该路径目录由前面的 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'
(需要第二个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只有一个字段,所以我把这句话改成了:
select substring(substring(substring('P:\pgdfecol\71698384737978\ASOCIADOS\8010625\8010625_02_04_20110111.ZIP' from '([^\\]*(\.ZIP|zip))') from '([^_]*_){2}') from '[0-9]{2}')
对于一个 Pk,我需要第二组([^_]*_)
,对于三个第四组,依此类推..
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。