2013-10-07 65 views
3

我尝试从一个表中的一个字段打印所有数据到一个文件中的任何行/字段终止字符。我只想将所有行连接并打印为输出行中的一行。我在这里过得怎么样吧:mysql select into outfile没有任何行终止字符

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; 

Unfortunely输出我得到的标签:

text1 text2 text3 

如果我添加

FIELDS TERMINATED BY '' 

那么所有的100个字符被印制成文件(VARCHAR (100)

text1                        text2                        text3                        

什么我应该怎么做一切控制为:

text1text2text3 

非常感谢提前!

回答

2

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

如果在数据空间,然后换一个更REPLACE(,””,‘’)围绕

如果碰上限制(多少行成为然后GROUP_CONCATinated这是最好的,如果你是使用以下使用类Unix操作系统

cat 'test.txt' | tr -d '\t' 
+0

嗨Parag,感谢您的帮助!感谢您的建议,我确实能够解决我的问题。我将在下面发布我的溶剂。我没有在文字栏中承担您对SPACES的评论。如果group_by使用的默认分隔符是COMMA',',那么为什么SPACES很重要,即使它是SPACE,为什么还要将它换成一个REPLACE帮助?我需要在数据库级别上做所有事情,所以使用tr不是一种选择。无论如何,我在Windows上,所以我甚至不能使用它,如果我想。再次感谢您的帮助! –

1

感谢@Parag我能解决我的问题,通过使用:

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

这样,我没得换周围的一切都与更换,并没有如果文本包含由GROUP_CONCAT使用的默认分隔符,即COMMA',',或者不是,则烦心。

值得记住的一件重要事情是,GROUP_CONCAT()具有最大长度的限制,当你的字段很长时,你会遇到最大长度限制。在我的情况下,TXT领域超过900个字符,所以我只好用:

SET SESSION group_concat_max_len = 1000000 

这并获得成功,但我不知道是否有任何更好的sollution?

0

使用DUMPFILE:

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';