sql - 分隔符可变时复制
问题描述
我有一个 .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 个空间,但我不知道我应该怎么做。请帮忙。谢谢!
解决方案
首先将整行作为单个字段导入另一个临时表:
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 |
推荐阅读
- mongodb - mongodb复杂聚合嵌套条件groupby
- jib - Maven 找不到 JIB 插件?
- python - Django Framework - 如果值已经存在,如何让用户覆盖现有值
- java - 命令行与 Android Studio Gradle 窗格
- azure-active-directory - 如何将机器人单点登录支持添加到现有应用程序?
- javascript - 找不到 reactjs 和 laravel 的 react-table 模块
- function - PHP 无法重新声明先前声明的函数(显示同一行)
- django - Django 关于不同的模板有不同的结果
- extjs - Extjs 小部件标签字段无法在远程存储列表中设置选定值
- bash - 在作为 awk args 传递的多行上匹配多个正则表达式