5

我在 linux bash 上查询 mysql 有问题,我的查询有 2 个带有“-”的列:

mysql -u root -pPass mydb -e "select `work-time` from work where `work-time`> '2013-0-3-07 00:00:00'";

但结果:

bash: work-time: command not found

我知道这个引用“`”的问题但是如何解决这个问题?

我更新我的查询

在线解决查询

mysql -u root -pPass mydb -e "select \`work-time\` from work where \`work-time\`> '2013-0-3-07 00:00:00'"

其他问题

如果我将查询保存在文件中,并像这样查询

 mysql -u root -pPass mydb < query.sql

得到错误:

ERROR at line 1: Unknown command '\`'.

使用标准查询从文件中解决查询

select `work-time` from work where `work-time`> '2013-0-3-07 00:00:00'

将查询保存到文件,例如。query.sql,并像这样查询:

mysql -u root -pPass mydb < query.sql
4

2 回答 2

2

Mysql 和在 bash shell 中使用反引号

像下面这样的查询将失败,因为反引号字符在 shell 中具有特殊含义:

mysql -u root -pPass mydb -e "select `work-time` from work"

从 shell 执行 sql 时,必须对反引号字符进行转义或在单引号字符串中使用。单引号字符串的示例如下:

mysql -u root -pPass mydb -e 'select `work-time` from work'

要使用双引号完成相同的查询,我们需要像这样转义反引号字符:

mysql -u root -pPass mydb -e "select \`work-time\` from work"

我建议阅读bash shell 中双引号和单引号之间的区别。


示例问题 1:

"select `work-time` from work where `work-time`> '2013-0-3-07 00:00:00'"

上述查询将不起作用。但是,您可以使用单引号来完成此操作,但您需要转义查询中的任何单引号,如下所示:

'select `work-time` from work where `work-time`> \'2013-0-3-07 00:00:00\''

示例问题 2:

"select \`work-time\` from work where \`work-time\`> \'2013-0-3-07 00:00:00\'"

上面的查询几乎很好,因为您确实需要转义反引号,因为它具有特殊含义。但是,您不需要转义单引号。使用双引号,查询可能如下所示:

"select \`work-time\` from work where \`work-time\`> '2013-0-3-07 00:00:00'"

SQL 文件中的反引号

如果您随后决定将此查询放在一个文件中并将其发送到 mysql,您将不再需要转义反引号字符,因为反引号字符在 sql 文件中没有特殊含义。在文件中,您只需放置标准 SQL:

select `work-time` from work where `work-time` > '2013-0-3-07 00:00:00'
于 2013-03-07T04:14:42.053 回答
0

反引号内的文本在使用裸引号或双引号时被解释为命令。

您需要使用单引号:

mysql -u root -pPass mydb -e 'select `work-time` from work'

或者,您可以避开反引号:

mysql -u root -pPass mydb -e "select \`work-time\` from work"
于 2013-03-07T04:14:48.477 回答