我在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中使用了不同的架构。
答案 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
中使用了不同的模式