PostgreSQL中的DB2locate_in_string等效项

时间:2020-03-26 19:50:58

标签: sql string postgresql db2 migration

从DB2迁移到PostgreSQL时,我使用db2的locate_in_string()函数发现了一些视图,该函数返回给定子字符串的指定实例的位置。

例如:

LOCATE_IN_STRING('aaabaabbaaaab','b',1,3); -- returns 8, for the 3d instance of 'b'
LOCATE_IN_STRING('aaabaabbaaaab','b',1,1); -- returns 4, for the 1st instance of 'b'

不幸的是,PostgreSQLs函数position()仅给我第一个实例的位置。

我在PostgreSQL中找不到类似的东西。

是否有其他选择或解决方法(也许是正则表达式?)?

1 个答案:

答案 0 :(得分:0)

可能有不同的方法,这是蛮力的。

它根据您要查找的模式拆分字符串。然后将其总长度加起来:

from PyPDF2 import PdfFileReader
import sys

fontkeys = set(['/FontFile', '/FontFile2', '/FontFile3'])

def walk(obj, fnt, emb):
    if '/BaseFont' in obj:
        fnt.add(obj['/BaseFont'])

    elif '/FontName' in obj and fontkeys.intersection(set(obj)):
        emb.add(obj['/FontName'])

    for k in obj:
        if hasattr(obj[k], 'keys'):
            walk(obj[k], fnt, emb)

    return fnt, emb

if __name__ == '__main__':
    fname = sys.argv[1]
    pdf = PdfFileReader(fname)
    fonts = set()
    embedded = set()

    for page in pdf.pages:
        obj = page.getObject()
        f, e = walk(obj['/Resources'], fonts, embedded)
        fonts = fonts.union(f)
        embedded = embedded.union(e)

    unembedded = fonts - embedded
    print 'Font List'
    pprint(sorted(list(fonts)))
    if unembedded:
        print '\nUnembedded Fonts'
        pprint(unembedded)