我在DB中有一张表。 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,但是我对如何正确使用所有这些原子和量词来解决这个特殊任务感到困惑。将会感激任何帮助和解释。
答案 0 :(得分:1)
由于您已经排好了所有内容,因此您不需要使用regexp_split_to_array
。你可以这样做:
select regexp_replace("dump", '.+_u([0-9]+).+', '\1') user_id,
regexp_replace("dump", '.+_cpn_([0-9]+)(.+)?', '\1') cpn
from "User_source";
含义
'.+_u([0-9]+).+'
任何事情,直到_u
,然后是_u
,任何数字一次或多次,任何后续事项。 “任意数字一次或多次”'已分组,因此我可以将其保留在替换\1
'.+_cpn_([0-9]+)(.+)?'
任何内容,直到_cpn_
,任何一个或多次,任何后面的任何内容(如果存在)。 “任意数字一次或多次”'已分组,因此我可以将其保留在替换\1