Postgresql 基于某个分隔符将行拆分为多行的SQL查询

Postgresql 基于某个分隔符将行拆分为多行的SQL查询,postgresql,Postgresql,我有一个名为“test”的表,它具有以下结构 category key value name real_name:Brad,nick_name:Brady,name_type:small NOVALUE other description co

我有一个名为“test”的表,它具有以下结构

category        key                                                 value    
name           real_name:Brad,nick_name:Brady,name_type:small        NOVALUE 
other          description                                           cool
但我想根据、delimiter和value after将键列分成多行:delimiter应该是value列的一部分,其中value等于NOVALUE。因此,输出应该如下所示:

category        key               value
name           real_name          Brad
name           nick_name          Brady
name           name_type          small
other          description        cool     
如何为此编写sql查询。我正在使用postgresql

有什么帮助吗?提前感谢。

您可以使用字符串到数组,不需要这样做:

select ts.category, 
       split_part(key_value, ':', 1) as key,
       split_part(key_value, ':', 2) as value
from test ts
  cross join lateral unnest(string_to_array(ts.key, ',')) as t (key_value)
where ts.value = 'NOVALUE'

union all

select category, 
       key, 
       value
from test
where value <> 'NOVALUE';

SQLFiddle示例:

我不想只基于某个分隔符将字符串拆分为多个列。相反,我想根据一个定界符分成多行,然后根据另一个定界符将每行分成多个列。你不应该首先存储定界符值谢谢,你是个天才。我测试过,这正是我想要的。再次感谢。嗨,一匹没有名字的马,我把问题改了一点。我不知道再次问你是否愚蠢,但我正在努力。而且它需要很快,所以我不想花太多时间在它上面。你能帮我吗?谢谢。@Rajeevkumar:在你收到答案后改变问题被认为是不好的。我已经更新了我的回答抱歉,我理解。事实上,我提出了不同的方法,但对此并不满意。所以我认为你能给出更好的解决方案。再次感谢编辑过答案的人。顺便说一下,我正在更新下面的答案。您可以查看并告诉我它是否好。虽然这段代码可以回答这个问题,但提供关于为什么和/或如何回答这个问题的额外上下文将显著提高其长期价值。请在您的回答中添加一些解释。
 select category, 
       split_part(key_value, ':', 1) as key,
       case  when  value = 'NOVALUE' then split_part(key_value, ':', 2) else value end 
from test
  cross join lateral unnest(string_to_array(key, ',')) as t (key_value)