将表原始分为Postgres中的块

Mas*_*yaf 1 sql postgresql

我有一个表格,条目太长,有1和0.例如我有桌子:

| Sent id.|   BoW.   |
|---------|----------|
|    1    | 10100101 |
|    2    | 00011110 |
|    3    | 10101111 |
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的表格来划分列BoW.条目成一些任意长度(在这种情况下为4)并分配块号.

| Sent id.| Chunk No. | BoW. |
|---------|-----------|------|
|    1    |     1     | 1010 |
|    1    |     2     | 0101 |
|    2    |     1     | 0001 |
|    2    |     2     | 1110 |
|    3    |     1     | 1010 |
|    3    |     2     | 1111 |
Run Code Online (Sandbox Code Playgroud)

我是初学者,试图在文档中搜索,但没有成功.也许是这样的,但具有适当的功能:

CREATE TABLE Bow2 AS
  SELECT Sent_id,
         (Chunk+1) AS Chunk_No,
         BoW/div(4) AS BoW;
  FROM Bow1;
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

想到的一种方法是使用generate_series():

select b.sent_id, chunk, substring(bow from (chunk - 1) * 4 + 1 for 4)
from (select b.sent_id, generate_series(1, 1 + floor(length(bow) - 1 / 4) ) as chunk
      from bow1 b
     ) b;
Run Code Online (Sandbox Code Playgroud)

这种方法很灵活,因为它适应不同的长度bow.