我尝试将表中一个字段的所有数据打印到没有任何行/字段终止字符的文件中。我只想将所有行连接起来并在输出行中打印为一行。我在这里是怎么做的:
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
非常感谢提前!
答案 0 :(得分:2)
假设文本列本身没有空格,请尝试 SELECT REPLACE(GROUP_CONCAT(txt),',','')AS txt INTO OUTFILE'test.txt'FROM tbl;
如果数据中有空格,则再包裹一个REPLACE(,'','')
如果你遇到限制(有多少行是GROUP_CONCATinated,那么如果你使用像OS这样的Unix,最好使用以下
cat 'test.txt' | tr -d '\t'
答案 1 :(得分: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
这样做了,但我想知道是否有更好的溶解?
答案 2 :(得分: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';