确定给定时间戳是否在postgresql中的同一天内

时间:2013-08-16 09:20:58

标签: java postgresql

我有一个带有“没有时区的时间戳”字段的PostgreSQL表。在某个给定点我查询此表,我需要那些记录,其中时间戳在执行查询的同一天内。这是代码:

 DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy/MM/dd HH:00:00");
 DateTime dt = new DateTime();
 String timeStampAsString = dt.toString(formatter);
 String select = "SELECT * FROM " + tableName + " WHERE " + tableName + ".timestamp >= '"+ timeStampAsString + "'";
 pst = dbConnection.prepareStatement(select);
 pst.execute();

我正在使用Joda,你也可以在其他地方填充该表,所以我现在格式正确(yyyy / MM / dd HH:00:00)。不确定我是否可以直接将查询传递给查询而不是转换为String,但这不会让我感到烦恼。

由于查询条件是> =而不是“NOW”时间戳,因此它不太可能返回某些内容。我需要的是在“NOW”时间戳的同一天内获取记录。我想我必须要求上限和下限,但我不确定如何计算此查询的下边界...任何想法?

谢谢!

2 个答案:

答案 0 :(得分:8)

我认为你需要这个查询

select *
from test1
where ts >= current_date and ts < current_date + interval '1 day';

select *
from test1
where ts >= now()::date and ts < now()::date + interval '1 day';

也可以

select *
from test1
where ts::date = now()::date;

但我认为它会因为列中的数据转换而表现更差。

sql fiddle demo

答案 1 :(得分:0)

我会这样做

long t1 = System.currentTimeMillis() / (24 * 3600 * 1000) * (24 * 3600 * 1000);
long t2 = t1 + 24 * 3600 * 1000;
String select = "SELECT * FROM " + tableName + " WHERE timestamp >= ? and timestamp < ?";
pst = dbConnection.prepareStatement(select);
pst.setTimestamp(1, new Timestamp(t1));
pst.setTimestamp(2, new Timestamp(t2));
...