我使用以下命令将 SQL 查询的结果输出到文本文件:
$sqlite3 my_db.sqlite "SELECT text FROM message;" > out.txt
这给了我这样的输出:
text for entry 1
text for entry 2
不幸的是,当文本包含换行符时,这会失败:
text for entry 1
text for
entry 2
如何指定 SQLite 在输出数据时使用的输出分隔符(我知道文本中不存在),以便我可以更轻松地解析结果?例如:
text for entry 1
=%=
text for
entry 2
=%=
text for entry 3
尝试使用 -分隔符选项。
$sqlite3 -separator '=%=' my_db.sqlite "SELECT text FROM message;" > out.txt
更新1
我想这是因为“-list”默认选项。要关闭此选项,您需要更改当前模式。
这是模式列表
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
-list Query results will be displayed with the separator (|, by
default) character between each field value. The default.
-separator separator
Set output field separator. Default is '|'.
在这里找到此信息
我有同样的问题,有一个更简单的解决方案。我在 https://sqlite.org/cli.html 找到了这个:
.分隔符 COL ?ROW?更改列和行分隔符
例如:
sqlite> .separator | ,
sqlite> select * from example_table;
1|3,1|4,1|15,1|21,1|33,2|13,2|16,2|32,
或者没有列分隔符:
sqlite> .separator '' ,
sqlite> select * from example_table;
13,14,115,121,133,213,216,232,
或者,要回答上面提出的具体问题,这就是所需要的:
sqlite> .separator '' \r\n=%=\r\n
sqlite> select * from message;
text for entry 1
=%=
text for
entry 2
=%=
text for entry 3
=%=
您可以在交互式提示中使用
.separator COL [ROW]
特殊命令(如 @dadosalado 在 https://stackoverflow.com/a/60417188/552683 中的回答),或使用 -newline SEP
命令行选项。 (文档)
为了分隔列,您必须使用 group_concat 和分隔符。
查询演变:
SELECT text FROM messages;
SELECT GROUP_CONCAT(text, "=%=") FROM messages;
SELECT GROUP_CONCAT(text, "\r\n=%=\r\n") FROM messages;
// to get rid of the concat comma, use replace OR change seperator
SELECT REPLACE(GROUP_CONCAT(text, "\r\n=%="), ',', '\r\n') FROM messages;
替代方案:将 Sqlite 导出到 CSV(使用自定义分隔符),然后使用它。