连接列并添加数字 postgresql



给定PostgreSQL中的表table1

数字1 | 数字2 | min_length | max_length 40 | 1801年 |    8 |    8  40 | 182 |    8 |    8  42 | 32 |    6 |    8  42 | 4 |    6 |    6  43 | 691 |    9 |    9

我想创建新表table2如下所示:

开始 |     停 4018010000 |     4018019999  4018200000 |     4018299999  42320000 |     42329999 423200000 |     423299999 4232000000 |     4232999999 42400000 |     42499999  43691000000 |     43691999999

因此,新表将包含:

column_1 = old_column_1 + old_column_2 + "0"的串联,等于 (old_column_3 - old_column_2的长度(
column_2 = old_column_1 + old_column_2 + "9"的串联等于 (old_column_3 - old_column_2的长度(

min_length不等于max_length时, 我需要考虑所有可能的长度。所以对于行"42";"32";6;8,所有长度为:6,7和8。

我尝试创建新的 table2 作为 table1,然后创建新列开始和停止,然后像这样连接列 1 和 2:

create table table2 as select * from table1;
alter table table2 add column start text,
add column stop text;
update table2 set start = number1 || number2

用于前 2 列的连接。但是我不知道如何进行所有串联,添加"0"和"9"。

假设所有列都NOT NULL,并且max_length总是大于min_length这将完成这项工作:

CREATE TABLE table2 AS
SELECT t.number1::text || rpad(t.number2::text, len, '0') AS start
, t.number1::text || rpad(t.number2::text, len, '9') AS stop
FROM   table1 t, generate_series(min_length, max_length) len

db<>小提琴在这里

generate_series()rpad()手册 .

如果可以NULLnumber1number2,请投入COALESCE

SELECT COALESCE(t.number1::text, '') || rpad(COALESCE(t.number2::text,''), len, '0') AS start
, COALESCE(t.number1::text, '') || rpad(COALESCE(t.number2::text,''), len, '9') AS stop
FROM table1 t, generate_series(min_length, max_length) len;

db<>小提琴在这里

如果min_lengthmax_length可以NULL,你必须定义应该发生的事情。

相关内容

  • 没有找到相关文章

最新更新