首页 > 解决方案 > Postgres 用户定义函数从字符串中删除子字符串

问题描述

我正在运行 PostgreSQL 9.6,我希望创建一个用户定义的函数,该函数将删除 2 个不同字符之间的文本。我在网上搜索了高低都无济于事。考虑下面的演示。

CREATE FUNCTION remove_between(
                               _original_string
                             , _start_delete_character text
                             , _end_delete_character text
                              ) RETURNS TEXT language sql AS 
$$
...
$$


SELECT remove_between('origi<stuff and junk>nal str<junk>ing','<','>')

产量:原始字符串

我被卡住的地方是我可以找到整个字符串的长度以及第一个<和最后一个的位置,>但是它会起飞太多。

标签: postgresql

解决方案


以下功能将完成工作。特别感谢 Abelisto 在评论中提供的帮助。

CREATE FUNCTION remove_between(
                               _original_string text
                             , _start_delete_character text
                             , _end_delete_character text
                              ) RETURNS text language sql AS
$$
    /*
    ==================================================
    Author:     dvandenbosch
    Created At: 7/14/2020
    Where Used:
    Usage: SELECT remove_between('origi<stuff and junk>nal str<junk>ing','<','>')
    ==================================================
    */
select regexp_replace(_original_string,_start_delete_character || '[^>]*' || _end_delete_character, '', 'g');
$$;

推荐阅读