【问题标题】:"You must provide a value expression on the right-hand side of the '%' operator." error in query statement“您必须在 '%' 运算符的右侧提供一个值表达式。”查询语句中的错误
【发布时间】:2015-01-26 22:40:34
【问题描述】:

我的 Powershell 脚本包含查询 -

# This code defines the search string in the database table
$SQLQuery = "SELECT bug_id, 
       bug_status, 
       resolution, 
       short_desc, 
       DATE_FORMAT(deadline, "%m/%d/%Y")
FROM   bugs 
WHERE  ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) 
         AND deadline BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY) 
       ) 
        OR ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) 
             AND deadline BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND 
                                  CURDATE() )        
       ORDER BY deadline ASC

"

在运行脚本时,它在日期格式部分失败并出现以下错误 -

You must provide a value expression on the right-hand side of the '%' operator.
At line:5 char:32
+        DATE_FORMAT(deadline, "% <<<< m/%d/%Y")
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

关于如何转义这些字符但同时会影响将在 MySql 数据库上触发的实际查询的任何建议?

【问题讨论】:

    标签: mysql powershell


    【解决方案1】:

    您在双引号字符串中使用双引号。未转义的嵌套双引号会过早终止字符串,因此 PowerShell 将 % 解释为运算符,而不是字符串的一部分。

    尝试用单引号替换嵌套的双引号,并使您的字符串成为适当的多行字符串:

    $SQLQuery = @"
    SELECT bug_id, 
           ...
           DATE_FORMAT(deadline, '%m/%d/%Y')
           ...
    "@
    

    【讨论】:

    • 第一种方法有效,但它影响了我的查询,因此完全忽略了截止日期列的结果。第二种方法没有帮助,因为我还有其他用单引号括起来的 where 子句。 bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' )
    • 是的,查询在MySql客户端执行时工作正常。
    • 尝试用单引号替换嵌套的双引号。
    • 在用单引号替换嵌套双引号时遇到以下错误。 Unexpected token 'RESOLVED', 'VERIFIED', 'INTEST' ) AND deadline BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY) )
    • 尝试使用多行字符串。另外,这是 PowerShell 错误还是 MySQL 错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多