28

Is it possible to display query results like below within mysql shell?

mysql> select code, created_at from my_records;
    code         created_at
1213307927  2013-04-26 09:52:10
8400000000  2013-04-29 23:38:48
8311000001  2013-04-29 23:38:48
3 rows in set (0.00 sec)

instead of

mysql> select code, created_at from my_records;
+------------+---------------------+
|     code   |          created_at |
+------------+---------------------+
| 1213307927 | 2013-04-26 09:52:10 |
| 8400000000 | 2013-04-29 23:38:48 |
| 8311000001 | 2013-04-29 23:38:48 |
+------------+---------------------+
3 rows in set (0.00 sec)

The reason I'm asking because I have some tedious task that I need to copy the output and paste it on other tool.

4

9 回答 9

37

--原始,-r

对于表格输出,列周围的“装箱”可以将一个列值与另一列值区分开来。对于非表格输出(例如以批处理模式生成或给出 --batch 或 --silent 选项时),输出中的特殊字符会被转义,以便轻松识别它们。换行符、制表符、NUL 和反斜杠写为 \n、\t、\0 和 \\。--raw 选项禁用此字符转义。

以下示例演示了表格输出与非表格输出以及使用原始模式禁用转义:

% mysql
mysql> SELECT CHAR(92);
+----------+
| CHAR(92) |
+----------+
| \        |
+----------+

% mysql --silent
mysql> SELECT CHAR(92);
CHAR(92)
\\

% mysql --silent --raw
mysql> SELECT CHAR(92);
CHAR(92)
\

来自MySQL 文档

于 2013-09-05T07:50:57.047 回答
16

不完全是您需要的,但它可能有用。在查询末尾添加 \G

select code, created_at from my_records\G;

查询结果将如下所示:

*************************** 1. row ***************************
 code: 1213307927
 created_at: 2013-04-26 09:52:10
*************************** 2. row ***************************
 code: 8400000000  
 created_at: 2013-04-29 23:38:48
于 2016-10-24T20:41:36.813 回答
10

单线

mysql -u YOURUSER -p --password=YOURPASSWORD -s -r -e "show databases;"        
mysql -u root -p --password=abc12345 -s -r -e "show databases;"
于 2016-09-09T06:31:56.960 回答
7

您需要传递-s参数mysql -s

于 2017-11-23T14:49:20.693 回答
2

mysql --skip-column-names --silent --raw --execute“从某处选择*;”

要使这些成为您的用户的默认选项,请将以下内容添加到 ~/.my.cnf skip_column_names silent raw

于 2021-11-02T03:20:39.467 回答
1

我解决了这个问题,但使用 concat_ws 将结果连接在一起,然后添加一个空格(第一个参数)

select concat_ws (' ',ipNetFull,ipUsage,broadcast,gateway) from ipNets;
于 2016-04-21T14:48:54.823 回答
1

快速解决方法:

使用较新的 MySQL 客户端(不确定哪些版本),您可以使用 PAGER 指令来操作结果。请注意,您可能必须更改 sed 表达式以避免破坏您的数据。

> PAGER sed 's/|//g'
PAGER set to 'sed 's/|//g''
barracuda@db-ess-rw.us-east-2.ess.aws.vt2.com [ess]
> SELECT 'row1_col1' AS column1, 'row1_col2' AS column2
  UNION ALL SELECT 'row2_col1', 'row2_col2';
+---------+---------+
 column1  column2 
+---------+---------+
 row1_col1  row1_col2 
 row2_col1  row2_col2 
+---------+---------+
2 rows in set (0.00 sec)

在执行此操作之前,您可能需要获取 PAGER 的当前值:

> PAGER
PAGER set to 'less'

重置为使用 'less' 作为 PAGER

> PAGER less
PAGER set to 'less'

PAGER 更有趣:

https://www.percona.com/blog/2013/01/21/fun-with-the-mysql-pager-command/

于 2021-02-03T21:10:04.500 回答
1

如果您想在没有周围表的情况下获取 MySQL 客户端输出,可以从 linux 命令行而不是通过 mysql 客户端运行查询:

$ echo "SELECT CONCAT_WS(' ','DROP TABLE',TABLE_NAME,';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%';" | mysql dbname

奖励:您可以通过排序和东西将输出管道化,甚至可以返回到 mysql:

$ echo "SELECT CONCAT_WS(' ','DROP TABLE',CONCAT_WS('.',TABLE_SCHEMA,TABLE_NAME),';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'i\'m\_not\_that\_mean';" | mysql | mysql;
于 2020-05-13T03:43:44.393 回答
-2

被问题和答案弄糊涂了。运行 sql 并且结果一直显示没有行或非表格格式。后来意识到当您右键单击查询空间时有一个选项,导航到“结果到”>“结果到网格”。这应该将其设置回表格格式。

还有一个“文本结果”选项,这是我遇到的格式。

:)!

于 2019-01-04T00:03:31.890 回答