当定界符为变量时进行复制

时间:2019-01-31 10:36:12

标签: sql postgresql

我有一个.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 个答案:

答案 0 :(得分:0)

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

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  |