postgresql从某个位置提取子字符串

vc6uscn9  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(187)

我有一个名为marc的表和一个名为tag的列,该列包含如下文本:

"|a john dumas .|d 1941|e united states|=^A22306"

我想读取这段文字,只提取一个介于|a|d之间的子串。
案文应为:john dumas.1941
我试过但没有成功:

select regexp_replace(tag, '(.*)_[^|][^a][^d]*$', '\1')
from marc where id='10825700016';

有人能帮我解决这个问题吗

rdlzhqv9

rdlzhqv91#

您可以使用substring()提取|a|e之间的部分。
然后使用replace()删除.|d

replace(substring(tag from '\|a(.+)\|e'), '.|d', '')
iezvtpos

iezvtpos2#

我想读这段文字,只提取一个子字符串,这是之间|a和|d.
您可以使用字符串函数(如CONCATsubstring)来完成此操作,如下面的DBFIDDLE

SELECT 
    CONCAT(
        trim(substring(tag, position('|a' in tag) + 2, position('|d' in tag) - position('|a' in tag) - 3)),
        '.',
        trim(substring(tag, position('|d' in tag) + 2, position('|e' in tag) - position('|d' in tag) - 2))
    ) AS extracted_string
FROM marc
WHERE id = '10825700016';

trim函数还将删除john之前和dumas之后的前导空格
输出:

extracted_string
john dumas.1941

相关问题