3

我通过注释使用 myBatis 从我的服务器获取数据。试图获取n天前的数据,注释:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < '#{n} days'")
ArrayList<OrderRecord> getOrderHistory(@Param("n") int n);

返回错误:

列索引超出范围:1,列数:0。查询数据库时出错。原因:org.postgresql.util.PSQLException:列索引超出范围:1,列数:0。

还,

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") String n);

当 n 类似于“5 天”时会产生类似的错误。

期望什么数据类型?

我正在使用 PostgreSQL。

4

2 回答 2

4

Mybatis 需要一个区间参数,不能自动将整数或字符串转换成它。

需要传递一个PGInterval类型的对象。

PGInterval pginterval = new PGInterval("5 days");

并且注释必须是:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") PGInterval n);
于 2012-11-05T13:11:12.667 回答
2

根据此链接,您还可以将值转换为 SQL 中的间隔。例如,这是我在我的应用程序中使用的:now() + CAST(#{my_interval} AS INTERVAL).

其中“my_interval”是“5 天”字符串。

于 2014-10-10T05:27:19.370 回答