我有这样的字符串:
schedulestart | event_labels
2018-04-04 | 9=TTR&11=DNV&14=SWW&26=DNV&2=QQQ&43=FTW
当我在数据库中查看它的时候,我有代码依赖于这个字符串,以这种格式来显示一个时间表,其中包含在那些日子里的事件标签。
现在,我发现自己需要在postgres中分解字符串以进行报告/分析,而我无法真正抽出字符串并用另一种语言解析它,所以我必须坚持使用postgres。
我找到了一种方法来解压缩字符串,结果如下所示:
User ID | Schedule Start | Unpacked String
2 | 2018-04-04 | TTR
2 | 2018-04-04 | 9
2 | 2018-04-04 | DNV
2 | 2018-04-04 | 11
2 | 2018-04-04 | SWW
2 | 2018-04-04 | 14
2 | 2018-04-04 | DNV
2 | 2018-04-04 | 26
select schedulestart, unnest(string_to_array(unnest(string_to_array(event_labels, '&')), '=')) from table;
现在我需要一种方法来执行一个时间间隔计算(比如2018-04-04+11 days::interval),如果我只得到一个数字列表,我就可以做到,但是我还需要将结果绑定到每个字符串,所以目标是这样的输出:
eventdate | event_label
2018-04-12 | TTR
2018-04-20 | DNV
其中eventdate是计划开始日期+事件发生在计划的哪一天。我不知道如何获取我创建的解压缩字符串并使用它来执行日期计算,以及将它与字符串绑定。
我考虑过只做一次unnest,所以它是11=TTR和14=DNV,但是我也不确定如何得到我想要的结果,有没有一种方法可以读取一个字符串,直到你到达一个特定的字符,然后在计算中使用它,然后读取字符串中超过特定字符的每个字符到一个新的列中?
我知道完全重写如何处理这将是理想的,但我没有最初写它,我没有时间或手段来重写这是使用的~20个位置。
1条答案
按热度按时间9njqaruj1#
下面是您的表(我添加了
userid
列):并输入数据:
最后是解决方案: