Postgresql 从一条记录中减去多个字符串
我是Postgres查询的新手。我试图根据特定的集合从列的每个记录中提取子字符串。 假设,我在每个记录的关键字“start”和“end”之间设置子字符串。所以问题是,一条记录中可能多次出现“start”和“end”,需要提取每组“start”和“end”关键字之间发生的内容Postgresql 从一条记录中减去多个字符串,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我是Postgres查询的新手。我试图根据特定的集合从列的每个记录中提取子字符串。 假设,我在每个记录的关键字“start”和“end”之间设置子字符串。所以问题是,一条记录中可能多次出现“start”和“end”,需要提取每组“start”和“end”关键字之间发生的内容 我们是否有可能通过Postgres中的单个查询而不是创建一个过程来实现这一点?如果是,请您在这方面提供帮助或重新指示我在哪里可以找到相关信息?假设/总是对元素进行定界,您可以使用string\u to\u array()将
我们是否有可能通过Postgres中的单个查询而不是创建一个过程来实现这一点?如果是,请您在这方面提供帮助或重新指示我在哪里可以找到相关信息?假设
/
总是对元素进行定界,您可以使用string\u to\u array()
将字符串转换为多个元素,并使用unest()
将数组转换为结果。然后可以使用regexp\u replace()
删除大括号中的分隔符:
select d.id, regexp_replace(t.name, '{start}|{end}', '', 'g')
from the_able d
cross join unnest(string_to_array(d.body,'/')) as t(name);
SQLFIDLE示例:假设
/
总是对元素进行定界,可以使用string\u to\u array()
将字符串转换为多个元素,并使用unest()
将数组转换为结果。然后可以使用regexp\u replace()
删除大括号中的分隔符:
select d.id, regexp_replace(t.name, '{start}|{end}', '', 'g')
from the_able d
cross join unnest(string_to_array(d.body,'/')) as t(name);
SQLFIDLE示例:您可以使用正则表达式实现所有这些,PostgreSQL正则表达式函数regexp_matches(匹配标记之间的内容)和regexp_replace(删除标记):
使用正则表达式和PostgreSQL正则表达式函数regexp_matches(用于匹配标记之间的内容)和regexp_replace(用于删除标记)实现所有这些功能:
这只是一个示例数据。数据格式与上述格式不同。在{end}/{start}之间可能有一些其他数据。主要目的是在某些特定关键字之间提取数据。@Keen2Learn:然后请发布真实数据。如果你公布了虚构的日期,你会得到错误的答案。这只是一个数据示例。数据格式与上述格式不同。在{end}/{start}之间可能有一些其他数据。主要目的是在某些特定关键字之间提取数据。@Keen2Learn:然后请发布真实数据。如果你发布虚构的日期,你会得到错误的答案