mysql - MySQL“LOAD DATA INFILE”查询,“TERMINATED BY”问题
问题描述
我有一个hashes
有 2 列的表,hash | plain
和一个看起来像这样的文本文件:
acbd18db4cc2f85cedef654fccc4a4d8:foo
37b51d194a7513e45b56f6524f2d51f2:bar
4e99e8c12de7e01535248d2bac85e732:foo:bar
我正在尝试执行此查询:
LOAD DATA LOCAL INFILE 'file.txt' INTO TABLE hashes COLUMNS TERMINATED BY ':' LINES TERMINATED BY '\n'
问题是,对于散列4e99e8c12de7e01535248d2bac85e732
,它只会插入foo
,而不是foo:bar
,因为COLUMNS TERMINATED BY ':'
.
我怎样才能让它“只分裂一次”来解决这个问题?
解决方案
您可以加载到用户变量中并使用一些字符串操作。
drop table if exists t;
create table t
(hash varchar(100),plain varchar(100));
LOAD DATA INFILE 'file.txt'
INTO TABLE t
LINES TERMINATED BY '\r\n'
(@var)
set
hash = substring_index(@var,':',1),
plain = replace(@var,substring_index(@var,':',1),'')
;
select *
from t;
+--------+----------+
| hash | plain |
+--------+----------+
| abc | :def |
| abc | :ghi |
| abc | :def:ghi |
+--------+----------+
3 rows in set (0.001 sec)
注意我已经使用 \r\n 来正确加载它 - 你应该测试你的环境
推荐阅读
- ios - 如何在 Storyboard 中指定 UIButton 的内容模式?
- java - 如何配置 java 应在 jdk 9、10 和 11 中使用的 DNS 服务器
- c - C程序调度器;如何使用 SetProcessAfinityMask() 将进程分配给特定的 CPU #
- android - 我需要从android设备打开一个图像,然后我必须调整它以使其更小,最后将它上传到firebase存储
- android - nativescript - firebase 插件的问题
- algorithm - 给定一组点,找出这些点是否存在一个凸四边形,除了它的角在里面之外没有其他点
- firebase - 使用 firebase 和应用引擎创建一次性 cron 作业
- python - 基本多层感知器中优化参数的问题
- node.js - 如果在 server.js 文件的 app.post 中的 python-shell 中更改,变量的值不会更改
- c++ - 如何修复“类模板的参数列表丢失”之类的错误消息?