解析DATE(a.issue_date) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
时间: 2024-09-09 16:13:21 浏览: 85
在Java中,如果你遇到了`ParseException: Encountered unexpected token: "CURDATE"`这样的错误,通常表示MyBatisPlus的SqlParser(用于解析SQL)在遇到`CURDATE()`这个表达式时出现了问题。这可能是因为MyBatisPlus不直接支持SQL函数`CURDATE()`,它更倾向于预编译的动态SQL。
要解决这个问题,你可以尝试以下几种方式:
1. 替换为MySQL原生语法[^1]:
```sql
SELECT xxx FROM (
SELECT yyy
FROM a
WHERE UNIX_TIMESTAMP(create_time) >= UNIX_TIMESTAMP(NOW()) - TIMESTAMPDIFF(DAY, NOW(), NOW())
GROUP BY zzz
) AS b
```
使用`UNIX_TIMESTAMP()`函数来转换日期到Unix时间戳,然后做减法计算间隔。
2. 如果你希望保持日期格式,可以将`CURDATE()`替换为具体的当前日期:
```sql
SELECT xxx FROM (
SELECT yyy
FROM a
WHERE issue_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
GROUP BY zzz
) AS b
```
注意这里假设`issue_date`字段也是日期类型。
3. 如果你在MyBatisPlus中,考虑使用自定义插件或者手动编写动态SQL,绕过SqlParser的限制:
```java
@Select("SELECT * FROM a WHERE issue_date >= #{startDateTime} AND issue_date <= #{endDateTime}")
Page<YourEntity> findData(@Param("startDateTime") Date startDate, @Param("endDateTime") Date endDate);
```
然后在调用时传递具体日期范围。
阅读全文