解决mysql的bash与coloumn名称有“ – ”&从文件查询mysql

我有问题在MySQL bash上查询mysql,我的查询有2个coloumn与“ – ”:

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 

我知道这个问题“`”,但是怎么解决这个问题呢?

我更新了我的查询

SOLVE查询在线

 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 '\`'. 

使用标准查询从文件中parsing查询

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

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

 mysql -u root -pPass mydb < query.sql 

Mysql和在bash shell中使用back ticks

像下面这样的查询将会失败,因为后退字符在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' 

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

你需要使用单引号:

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

或者,你可以逃避反向:

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