相同的sql语句在Jasper和pgAdmin中的工作方式不同

时间:2014-11-13 11:01:53

标签: postgresql jasper-reports jaspersoft-studio

我在JasperSoft工作室遇到SQL查询问题。我试图从两个日期之间从posgreSQL数据库获取记录。 我用这句话:

SELECT spent_on FROM time_entries WHERE spent_on BETWEEN date '2014-01-01' AND date '2014-11-1' ORDER BY spent_on DESC

或更简单但有同样的问题:

SELECT spent_on FROM time_entries WHERE spent_on BETWEEN '2014-01-01' AND '2014-11-1' 

也使用<和>以同样的方式结束。

spent_on列定义为:spent_on date NOT NULL。

当我在pgAdmin中运行此查询时,我得到了我希望收到的所有行,但是当我在JasperSoft Studio中尝试相同的语句时,我得不到。

我发现当我将范围更改为:“日期'2012-01-01'和日期'2014-11-1'”之后我可以获得一些行,而我得到的最后一个条目是2012-05- 29。 (数据库最后一个是2014-11-12)

Redmine的数据库存储数据。

解决

原因:Jaspersoft Studio和pgadmin中使用了不同的架构。

2 个答案:

答案 0 :(得分:1)

尝试不使用date关键字。贾斯帕可能会以错误的方式理解这一点。 (只是在黑暗中拍摄。)在这种情况下,字符串文字会自动转换为date

SELECT spent_on
FROM   time_entries
WHERE  spent_on BETWEEN '2014-01-01' AND '2014-11-1'
ORDER  BY spent_on DESC;

我也建议ORDER BY spent_on DESC NULLS LAST,但您说该列已定义为NOT NULL,因此不适用。 Details.

此外,观察到的行为(未获取最新行)表明您未连接到同一数据库或使用其他 search_path 运行查询,因此您最终一个在不同架构中具有相同名称的不同表。详细说明:

答案 1 :(得分:0)

回答@GregG

Jaspersoft Studio和pgadmin

中使用了不同的模式