3

我尝试在没有任何行/字段终止字符的情况下将表中一个字段的所有数据打印到文件中。我只想将所有行连接起来并打印为输出行中的一行。我是这样做的:

CREATE TABLE tbl (txt VARCHAR(100));
INSERT INTO tbl VALUES ("text1");
INSERT INTO tbl VALUES ("text2");
INSERT INTO tbl VALUES ("text3");

SELECT txt FROM tbl;

SELECT txt INTO OUTFILE 'test.txt' LINES TERMINATED BY '' FROM tbl;

不幸的是,在输出中我得到了标签:

text1   text2   text3   

如果我添加

FIELDS TERMINATED BY ''

然后将所有 100 个字符打印到文件中 (VARCHAR(100)

text1                                                                                               text2                                                                                               text3                                                                                               

我应该怎么做才能将所有内容连接为:

text1text2text3

提前谢谢了!

4

3 回答 3

2

假设文本列本身没有空格,请尝试 SELECT REPLACE(GROUP_CONCAT(txt),',','') AS txt INTO OUTFILE 'test.txt' FROM tbl ;

如果数据中有空格,则再换一个 REPLACE( ,' ','')

如果您遇到限制(有多少行将被 GROUP_CONCAT 化,那么如果您使用的是 Unix 之类的操作系统,最好使用以下

cat 'test.txt' | tr -d '\t'
于 2013-10-07T16:27:48.740 回答
1

感谢@Parag,我能够通过使用以下方法解决我的问题:

SELECT GROUP_CONCAT(txt SEPARATOR '') INTO OUTFILE 'test.txt' LINES TERMINATED BY '' FROM tbl;

这样我就不必用 REPLACE 将所有内容都包裹起来,也不必担心文本是否包含 GROUP_CONCAT 使用的默认分隔符,即 COMMA ','。

值得记住的一件重要事情是 GROUP_CONCAT() 有一个最大长度限制,当你的字段很长时你可能会遇到这个限制。在我的例子中,txt 字段超过 900 个字符,所以我不得不使用:

SET SESSION group_concat_max_len = 1000000

这成功了,但我想知道是否有更好的解决方案?

于 2013-10-08T11:09:58.163 回答
0

使用转储文件:

CREATE TABLE tbl (txt VARCHAR(100));
INSERT INTO tbl VALUES ("text1");
INSERT INTO tbl VALUES ("text2");
INSERT INTO tbl VALUES ("text3");

SELECT txt FROM tbl;

SELECT txt INTO DUMPFILE 'test.txt';
于 2014-09-24T15:05:50.413 回答