【问题标题】:SPLIT_PART with a negative value [Postgres 9.5]具有负值的 SPLIT_PART [Postgres 9.5]
【发布时间】:2018-08-22 08:46:58
【问题描述】:

我需要对该查询使用 split_part 函数:

CREATE TABLE client_group_by_group_test AS SELECT *, SPLIT_PART( groupe,
 ',', 1 ) AS group1, SPLIT_PART(SPLIT_PART(groupe,',',2),',',-1) AS 
 group2, SPLIT_PART(SPLIT_PART(groupe,'',3),'',-3) AS group3, 
 SPLIT_PART(groupe,'',-4) AS group4 FROM planification_client

但它给了我以下错误:

错误:字段位置必须大于零

那么,我该如何处理这里的负值呢?

这种reverse(split_part(reverse(col_A), '_'::text, 1))的声明能用吗?我指的是that question

编辑:我完全被这个查询所困扰。

更多详细信息:我有一列带有“服务器名称”,另一列带有不同的组,用逗号分隔。

server name| group                        |
-----------+------------------------------+
XPTERTBIEP9|GRNW_SPO_S_F_H, GRNW_SPO_S_I_J|

我需要得到的输出是如果服务器有多个组,它们需要在不同的列中,比如 group1、group2...

server name| group                        |group1        |group 2
-----------+------------------------------+--------------+--------------
XPTERTBIEP9|GRNW_SPO_S_F_H, GRNW_SPO_S_I_J|GRNW_SPO_S_F_H|GRNW_SPO_S_I_J

【问题讨论】:

  • 是的,当您想要负偏移量时,您应该使用 reverse 解决方案 - 它可以工作 (stackoverflow.com/a/46753602)
  • 好的,我要测试一下。谢谢
  • 负索引应该代表什么?距离末端的偏移量?
  • 是的,负索引应该代表距离末尾的偏移量。

标签: postgresql split postgresql-9.5


【解决方案1】:

如果负数应该表示距离末尾的偏移量,那么两步方法可能会更好:

CREATE TABLE client_group_by_group_test 
AS 
SELECT ..., 
       agroups[1] as group1,
       agroups2[cardinality(agroups2) - 1] as groups2,
       agroups3[cardinality(agroups3) - 3] as groups3,
       agroups[cardinality(agroups) - 4] as group4
from (
   select *,
          string_to_array(groupe, ',') as agroups, 
          (string_to_array(string_to_array(groupe, ','), ',')[2]) as agroups2,
          (string_to_array(string_to_array(groupe, ','), ',')[3]) as agroups3,
   from planification_client
) t

请注意,您需要在最外面的 SELECT 中列出所需的列,以排除中间的“agroups”列。

【讨论】:

  • string_to_array((string_to_array(groupe, ','), ',')[2]) as agroups2, 这一行有问题:ERROR: syntax error at or near "[" 我试图删除 [] 但出了点问题
猜你喜欢
  • 2020-01-24
  • 2016-10-01
  • 2019-03-30
  • 1970-01-01
  • 2018-09-10
  • 2016-03-13
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多