Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从一条记录中减去多个字符串_Postgresql_Postgresql 9.2 - Fatal编程技术网

Postgresql 从一条记录中减去多个字符串

Postgresql 从一条记录中减去多个字符串,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我是Postgres查询的新手。我试图根据特定的集合从列的每个记录中提取子字符串。 假设,我在每个记录的关键字“start”和“end”之间设置子字符串。所以问题是,一条记录中可能多次出现“start”和“end”,需要提取每组“start”和“end”关键字之间发生的内容 我们是否有可能通过Postgres中的单个查询而不是创建一个过程来实现这一点?如果是,请您在这方面提供帮助或重新指示我在哪里可以找到相关信息?假设/总是对元素进行定界,您可以使用string\u to\u array()将

我是Postgres查询的新手。我试图根据特定的集合从列的每个记录中提取子字符串。 假设,我在每个记录的关键字“start”和“end”之间设置子字符串。所以问题是,一条记录中可能多次出现“start”和“end”,需要提取每组“start”和“end”关键字之间发生的内容


我们是否有可能通过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:然后请发布真实数据。如果你发布虚构的日期,你会得到错误的答案