【问题标题】:Inserting values (generate_series) - how can I reuse/cycle the numbers, e.g, 1,2,3,1,2,3插入值 (generate_series) - 我如何重用/循环数字,例如 1,2,3,1,2,3
【发布时间】:2011-12-09 07:54:31
【问题描述】:

我正在使用 generate_series 在表中插入值。并且 generate_series 插入在其范围内指定的值。

例如: 对于以下查询,

SELECT i AS id, i AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;

我们得到的结果是:

id  age  house_number
1   1    1
2   2    2
3   3    3
4   4    4
5   5    5
6   6    6

但我的问题是,我只想插入“年龄”列中的第 3 位,然后在 3 之后从 0 开始:

id  age  house_number
1   1    1
2   2    2
3   3    3
4   1    4
5   2    5
6   3    6

这可能吗? generate_series() 中是否有一些随机函数执行相同的功能?

【问题讨论】:

    标签: postgresql generate-series


    【解决方案1】:

    您可以使用modulo operation 从 0 循环到 n - 1 并加一:

    SELECT i AS id, (i - 1) % 3 +1 AS age, i AS house_number
    INTO egg
    FROM generate_Series(1,6) AS i;
    

    【讨论】:

    • 或者如果表已经存在,你可以这样做INSERT INTO egg SELECT ... FROM ...
    【解决方案2】:

    您可以使用专门设计的序列:

    create table test (id serial);
    alter sequence test_id_seq cycle minvalue 0 maxvalue 3 start 0 restart;
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    insert into test values(DEFAULT);
    select * from test;
     id 
    ----
      0
      1
      2
      3
      0
      1
      2
      3
    (8 rows)
    

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多