我有问题在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"