MySQL выбрать в выходной файл без символа окончания строки
Я пытаюсь распечатать все данные из одного поля из таблицы в файл без любого символа завершения строки / поля. Я просто хотел бы, чтобы все строки были объединены и напечатаны как одна строка в строке вывода. Вот как я это делаю:
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
Спасибо заранее!
3 ответа
Предполагая, что в самом текстовом столбце нет пробелов, попробуйте SELECT REPLACE(GROUP_CONCAT(txt),',','') AS txt INTO OUTFILE 'test.txt' FROM tbl;
Если в данных есть пробелы, оберните еще один REPLACE(,' ','')
если вы столкнетесь с лимитом (сколько строк должно быть GROUP_CONCATinated, то лучше использовать следующее, если вы используете Unix как OS
cat 'test.txt' | tr -d '\t'
Благодаря @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
Это сработало, но мне интересно, есть ли лучшее решение?
Используйте 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';