PostgreSQL-查询每行包含5个元素数组的单列表,以返回每行拆分为5列的数组
我需要获取此单列表的内容,每行包含5个元素的数组:PostgreSQL-查询每行包含5个元素数组的单列表,以返回每行拆分为5列的数组,sql,arrays,postgresql,unnest,Sql,Arrays,Postgresql,Unnest,我需要获取此单列表的内容,每行包含5个元素的数组: Col1 ---- {a,b,c,d,e} {f,g,h,i,j} {a,f,r,y,t} ... 为此: colA | ColB | ColC | ColD | ColE a | b | c | d | e f | g | h | i | j a | f | r | y | t 我已尝试使用unnest(字符串到数组): 但最终以 splitvals a b c
Col1
----
{a,b,c,d,e}
{f,g,h,i,j}
{a,f,r,y,t}
...
为此:
colA | ColB | ColC | ColD | ColE
a | b | c | d | e
f | g | h | i | j
a | f | r | y | t
我已尝试使用unnest(字符串到数组):
但最终以
splitvals
a
b
c
d
e
但我需要将每个数组元素拆分为一个单独的列,而不必求助于split_part()。在其他上下文中,我可能每行有一个7个元素的数组,因此最好有一个更“通用”的查询来实现任何数组大小的查询,而不只是为每个额外的元素添加split_part()
有什么想法吗
使用以下方法找到答案:
SELECT NULLIF(p[1],'') AS Col1,
NULLIF(p[2],'') AS Col2,
NULLIF(p[3],'') AS Col3,
NULLIF(p[4],'') AS Col4,
NULLIF(p[5],'') AS Col5
FROM (
SELECT string_to_array('a,b,c,d,e', ',') AS p
) x
您不能有一个通用的“查询”,因为SQL查询只有一组预先定义的列。只有在使用动态SQL时,列的数量才能变化。是的,我应该更明确地说,我不希望每个额外的数组元素都有一个额外的split_part()函数。也许您可以自定义此问题的答案。也许它是重复的…@ChrisThomas数据类型是什么,数组还是基于文本的?假设使用数组,您只需执行
选择col1[1]、col1[2]、col1[3]、…
;如果是字符串,则首先拆分字符串,然后使用如上所述的数组索引来获取列。谢谢@Jaisus。你和404的建议结合起来帮我解决了这个问题!
SELECT NULLIF(p[1],'') AS Col1,
NULLIF(p[2],'') AS Col2,
NULLIF(p[3],'') AS Col3,
NULLIF(p[4],'') AS Col4,
NULLIF(p[5],'') AS Col5
FROM (
SELECT string_to_array('a,b,c,d,e', ',') AS p
) x