首页 > 解决方案 > 分隔符可变时复制

问题描述

我有一个 .txt 文件,其中的整数用空格分隔。我的表是 temp(a int, b int)。我的文件有输入

1   918
...
9   12
10  17
...
99  87
100 12

请注意,两个整数之间的间距取决于第一个整数的“长度”,它是可变的。我应该如何将这些复制到我的桌子上?

我的尝试:(这绝对是错误的)

COPY temp FROM 'address/to/file' ( FORMAT TXT, DELIMITER(' ') );

我知道必须有超过 1 个空间,但我不知道我应该怎么做。请帮忙。谢谢!

标签: sqlpostgresql

解决方案


首先将整行作为单个字段导入另一个临时表:

CREATE TEMP TABLE x (t TEXT);
COPY x FROM 'C:\temp\1.txt'

SELECT *结果:

t
-------
1   918
9   12
10  17
99  87
100 12

然后操作数据并放入您的表中:

CREATE TEMP TABLE t (a INTEGER, b INTEGER);

INSERT INTO t
SELECT r[1]::INTEGER, r[2]::INTEGER
FROM (
        SELECT REGEXP_SPLIT_TO_ARRAY(t, '\s+') AS r
        FROM x
) AS rr

SELECT *结果:

| a   | b   |
| --- | --- |
| 1   | 918 |
| 9   | 12  |
| 10  | 17  |
| 99  | 87  |
| 100 | 12  |

推荐阅读