Spock测试时SQL语句 H2语法错误



这个问题只在运行我的测试用例时发生。运行应用程序和查询本身可以正常工作。

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement 
下面是SQL查询
SELECT
C.idCampaign,
SUM(DATEDIFF(IFNULL(CPM.actual_end, CURDATE()),CPM.actual_start)) AS daysPaused
FROM Campaign C
JOIN CampaignPauseManagement CPM
ON C.idCampaign = CPM.idCampaign
WHERE C.idCampaign IN (:campaignIds)
GROUP BY C.idCampaign;

我试过改变变量名,使用COALESCE的不同变体,case语句,但没有任何运气。

错误信息显示SUM

括号前有一个*标记
SELECT C.idCampaign, SUM(DATEDIFF(IFNULL(CPM.actual_end, CURDATE()),CPM.actual_start)[*]) AS daysPaused

来自文档:

DATEDIFF(datetimeField, aDateAndTime, bDateAndTime)

返回两个日期/时间值之间跨越的单位边界数。这个方法返回一个long。datetimeField表示单位。只有TIMEZONE_HOUR、TIMEZONE_MINUTE和TIMEZONE_SECOND字段使用时区偏移量组件。对于所有其他字段,如果日期/时间值具有时区偏移分量,则忽略它。

的例子:

DATEDIFF (T1。创建、T2.CREATED)

注意DATEDIFF有3个参数,第一个参数是单位规格。

最新更新