Postgresql 为各种数字和字母的混合生成系列

Postgresql 为各种数字和字母的混合生成系列,postgresql,Postgresql,我使用以下语法: generate_series(1, COALESCE((string_to_array(table.id_number, '-')) [2] :: INT, 1)) AS n (numbers) 在ID为32.22.1-4的元素中生成ID,以获得ID为32.22.1、32.22.2、32.22.3和32.22.4的4行。如何将其更改为同时接受信件 因此,对于32.22.a-c,将有: 32.22.a, 32.22.b, 32.22.c 对于32.22.d1-d4,将有 3

我使用以下语法:

generate_series(1, COALESCE((string_to_array(table.id_number, '-')) [2] :: INT, 1)) AS n (numbers)
在ID为32.22.1-4的元素中生成ID,以获得ID为32.22.1、32.22.2、32.22.3和32.22.4的4行。如何将其更改为同时接受信件

因此,对于32.22.a-c,将有:

32.22.a, 32.22.b, 32.22.c
对于32.22.d1-d4,将有

32.22.d1, 32.22.d2, 32.22.d3, 32.22.d4
编辑: 整个代码如下所示:

INSERT INTO ...
(     
     SELECT
     ...
    FROM table
      CROSS JOIN LATERAL
    generate_series(1, COALESCE((string_to_array(table.id_number, '-')) [2] :: INT, 1)) AS n (numbers)
    WHERE table.id_number LIKE ...
  );
结果:

  output   
---------
 32.33.a1
 32.33.a2
 32.33.a3
 32.33.a4
 32.33.a5
 32.34.a
 32.34.b
 32.34.c
 32.35.b
 32.35.c
 32.35.d
 32.35.e
(12 rows)

哦,有点长。如果代码看起来像:
  output   
---------
 32.33.a1
 32.33.a2
 32.33.a3
 32.33.a4
 32.33.a5
 32.34.a
 32.34.b
 32.34.c
 32.35.b
 32.35.c
 32.35.d
 32.35.e
(12 rows)