【发布时间】:2020-05-15 20:17:07
【问题描述】:
我是 PostgreSQl 的新手,我无法找到获得下面提到的输出的解决方案。
我创建了一个表,其中有一列数据类型为 text[],它是一个文本字符串数组(单个元素)。
我的桌子是这样的:
col1 col2
ID1 {"P25963(MI:0326), Homo sapiens);O14920(MI:0326), Homo sapiens)"}
ID2 {"Q8NFZ0(MI:0326), Homo sapiens);P12931(MI:0326), Homo sapiens)"}
ID3 {"P26368(MI:0326), Homo sapiens);Q15637(MI:0326), Homo sapiens); Q15638(MI:0326), Homo sapiens)"}
当我尝试访问 col2 的第一个和第二个元素时,我得到以下输出。
SELECT col2[1] FROM table;
P25963(MI:0326), Homo sapiens);O14920(MI:0326), Homo sapiens
Q8NFZ0(MI:0326), Homo sapiens);P12931(MI:0326), Homo sapiens
P26368(MI:0326), Homo sapiens);Q15637(MI:0326), Homo sapiens); Q15638(MI:0326), Homo sapiens
SELECT col2[2] FROM table;
NULL
NULL
NULL
我想将此数组元素拆分为多个元素(存在;),将它们取消嵌套,然后对未嵌套的行执行一些正则表达式。
拆分后想要的输出是:
col1 col2
ID1 {P25963(MI:0326), Homo sapiens},{O14920(MI:0326), Homo sapiens}
ID2 {Q8NFZ0(MI:0326), Homo sapiens},{P12931(MI:0326), Homo sapiens}
ID3 {P26368(MI:0326), Homo sapiens},{Q15637(MI:0326), Homo sapiens}, {Q15638(MI:0326), Homo sapiens}
取消嵌套后所需的输出是:
col1 col3 col4
ID1 P25963(MI:0326), Homo sapiens O14920(MI:0326), Homo sapiens
ID2 Q8NFZ0(MI:0326), Homo sapiens P12931(MI:0326), Homo sapiens
ID3 P26368(MI:0326), Homo sapiens Q15637(MI:0326), Homo sapiens
ID3 P26368(MI:0326), Homo sapiens Q15638(MI:0326), Homo sapiens
任何建议都会很有帮助。
谢谢
【问题讨论】:
-
那么每个数组都包含一个元素?
-
是的,为了更清晰,我已经编辑了原始帖子
标签: sql arrays string postgresql unnest