“您必须在'%'运算符的右侧提供值表达式。”在查询语句错误

问题描述:

我的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数据库上触发的实际查询?

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

试着用单引号代替嵌套双引号,让你的字符串适当多行字符串:

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

第一种方式工作,但它的影响。因此我省略查询的最后期限列结果完全。 第二种方法没有帮助,因为我有其他where子句用单引号括起来。 'bug_status IN('RESOLVED','VERIFIED','INTEST')' – SoftwareTestingEnthusiast 2015-01-26 22:57:16

+0

查询是否在'mysql'客户端运行时工作? – 2015-01-26 23:11:31

+0

是的,查询在MySql客户端中执行时工作正常。 – SoftwareTestingEnthusiast 2015-01-26 23:12:38