使用 regexp_split_to_array 将文本列拆分为 2

Split text column into 2 using regexp_split_to_array

我在数据库中有一个 table。 http://sqlfiddle.com/#!15/48214/1 我需要将转储列拆分为 2 - 用户 ID 和活动编号。 我已经使用以下代码完成了此操作:

select
substring (dump, ((position('u' in dump))+1),(length(dump)-14)) as user_id, 
substring (dump, ((position('p' in dump))+3),1)) as campaign_n  from "User_source";

但我需要在一个代码行中使用正则表达式方法来完成。已经研究过此页面 http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP,但我对如何正确使用所有这些原子和量词来完成这项特定任务感到有点困惑。将不胜感激任何形式的帮助和解释。

因为你已经把所有的东西都排成一行,所以你不需要使用 regexp_split_to_array。你可以这样做:

select regexp_replace("dump", '.+_u([0-9]+).+', '') user_id,
       regexp_replace("dump", '.+_cpn_([0-9]+)(.+)?', '') cpn
from "User_source";

含义

  1. '.+_u([0-9]+).+' 直到 _u,然后 _u,任何数字一次或多次,之后的任何数字。 'any number one or many times' 已分组,因此我可以将其保留在替换 </code></li> 上 <li><code>'.+_cpn_([0-9]+)(.+)?' _cpn_ 之前的任何数字,一次或多次,如果存在,则在它之后的任何数字。 'any number one or many times' 已分组,因此我可以将其保留在替换

看到它在这里工作:http://sqlfiddle.com/#!15/48214/7