2013-03-07 51 views
4

+查詢MySQL的我有在Linux上的bash查詢mysql的問題,我的查詢有2 coloumn以 「 - 」:求解MySQL的Linux的慶典與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 

我知道問題這個引用「`」但如何解決這個問題?

更新我的QUERY

上線求解查詢:

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 

回答

1

MySQL和使用回到bash的蜱殼

由於反勾字符在外殼特殊含義類似下面的查詢會失敗:

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中的difference between double quotes and single quotes


例問題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,你不再需要逃避back tick字符,因爲back tick字符在sql文件中沒有特殊含義。在該文件中,你只想把標準的SQL:使用裸或雙引號內

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

是多數民衆贊成在工作中,這個問題已經解決了,但我更新我的問題,如果這個查詢on file will error – user1448102 2013-03-07 04:33:12

+0

我已將您的最新查詢添加到我的答案中。 – Brett 2013-03-07 04:37:14

+0

嗨佈雷特,這是解決與刪除'2013-03-07 00:00:00'的報價,但我希望我的每個查詢書籤的文件,所以我可以這樣查詢:mysql -u root -pPass DBname < query.sql,但錯誤,如果我的查詢沒有引號「'」查詢成功。你有想法嗎? – user1448102 2013-03-07 04:42:55

0

內反引號的文本被解釋爲命令。

你需要使用單引號:

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

或者,您可以逃避反引號:

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

感謝您的問題,但是如果我的查詢是這樣的話會出錯:mysql -u root -pPass mydb -e'select'work-work' from'where'work 'time'>'2013-03-05 00:00:00''? – user1448102 2013-03-07 04:17:29

+0

@ user1448102我也爲雙引號添加了一個示例。 – 2013-03-07 04:21:03

+0

是的,這是工作,但我有其他問題,如果我的查詢文件如mysql -u root -pPass工作 user1448102 2013-03-07 04:25:18