【问题标题】:SOLVE mysql linux bash with coloumn name have "-" & query mysql from file解决 mysql linux bash 列名有“-” & 从文件中查询 mysql
【发布时间】:2013-02-22 03:55:56
【问题描述】:

我在 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

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

我更新我的查询

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

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

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 linux bash


    【解决方案1】:

    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 中的 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,您将不再需要转义反引号字符,因为反引号字符在 sql 文件中没有特殊含义。在文件中,您只需放置标准 SQL:

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

    【讨论】:

    • 是的,这个问题已经解决了,但是我更新了我的问题,如果这个查询文件会出错
    • 我已将您的最新查询添加到我的答案中。
    • 嗨,布雷特,是的,这可以通过删除“2013-03-07 00:00:00”上的引用来解决,但我希望每个查询书签都在文件中,所以我可以像这样查询:mysql -u root -pPass DBname
    • @user1448102 我已经更新了我对您关于从文件发送查询的最后一个问题的回答。
    • 是的,太好了,你节省我的时间:)
    【解决方案2】:

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

    你需要使用单引号:

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

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

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

    【讨论】:

    • 感谢您的提问,但如果我的查询如下:mysql -u root -pPass mydb -e 'select work-time from work' where work-time > '2013-03- 05 00:00:00' ' ?
    • @user1448102 我也添加了双引号的示例。
    • 是的,这行得通,但我还有其他问题,如果我对文件的查询,如 mysql -u root -pPass 工作
    • @user1448102 这完全没有意义,而且似乎没有关系。
    • 我尝试从文件中查询 mysql,如“从用户中选择 *”(user.sql),我在 bash 上调用此查询,如下所示:mysql -u root -pPass mysql
    猜你喜欢
    • 2013-12-23
    • 2016-01-25
    • 2013-03-22
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多