BTW从表中选择COUNT(*),其中activitydate>'2014-11-20'和activitydate<'2014-11-21'和zipcode=12345
在pgadmin中运行完美。
public Response query(
@QueryParam("start_date") String start_date,
@QueryParam("end_date") String end_date,
@QueryParam("zipcode") String zipcode
) throws Exception {
...
...
pstmt = conn.prepareStatement("SELECT COUNT(*) FROM table WHERE activitydate > ? AND activitydate < ? AND zipcode = ?");
pstmt.setString(1, start_date);
pstmt.setString(2, end_date);
pstmt.setString(3, zipcode);
更新:我将其更改为java.sql.timestamp,但仍然不起作用:
public Response query(
@QueryParam("start_date") Timestamp start_date,
@QueryParam("end_date") Timestamp end_date,
@QueryParam("zipcode") String zipcode
) throws Exception {
...
...
pstmt = conn.prepareStatement("SELECT COUNT(*) FROM table WHERE activitydate > ? AND activitydate < ? AND zipcode = ?");
pstmt.setTimestamp(1, start_date);
pstmt.setTimestamp(2, end_date);
pstmt.setString(3, zipcode);
对于使用半开时间跨度的SQL:“选择*FROM tbl WHERE when!<?和when<?;”
myPreparedStatement.setObject( // Use a prepared statement so you can pass smart objects rather than dumb strings.
1 , // Specify which placeholder is being fulfilled.
LocalDate // Represent a date-only value, without time-of-day and without time zone or offset-from-UTC.
.parse( "2014-11-20" ) // Parse an input string in standard ISO 8601 format to get a `LocalDate` object.
.atStartOfDay() // Determine the first moment of the day on that date. Returns a `LocalDateTime` object representing a date with time-of-day but lacking any concept of time zone or offset-from-UTC.
) ;
myPreparedStatement.setObject(
2 ,
LocalDate
.parse( "2014-11-21" )
.atStartOfDay()
) ;
当心:我猜您在数据库中的列使用了错误的类型。只能用带时区的时间戳
跟踪时刻,而不能用不带时区的时间戳
跟踪时刻。搜索堆栈溢出以获取更多信息。
延斯的答案现在已经过时了。现在,您应该使用现代的java.time类来取代麻烦的旧遗留date-time类。
不,错误的数据类型。除了是遗留的并且在设计上存在严重缺陷之外,java.sql.timestamp
类还表示一个时刻,即时间线上的一个特定点。因此,这与您的Timestamp类型没有时区
的列不匹配。
您应该使用LocalDateTime
类。该类表示具有一天中的时间的日期,但缺少任何偏移量或时区的概念。
若要从数据库中检索值,请执行以下操作。
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
myPreparedStatement.setObject( … , ldt ) ;
为了解决具有时间的日期问题,我们需要确定一天的开始时间。使用LocalDateTime
,我们没有要解释的时区异常。所以一天总是在00:00开始。不过,我们应该养成让java.time确定一天的开始时间的习惯。
LocalDate startDate = LocalDate.parse( "2014-11-20" ) ;
LocalDate stopDate = LocalDate.parse( "2014-11-21" ) ;
LocalDateTime start = startDate.atStartOfDay() ;
LocalDateTime stop = stopDate.atStartOfDay() ;
用占位符编写SQL。
我建议你改变你的想法,养成半开放的方法来定义时间跨度的习惯。在半开放中,开始是包容的,而结束是排他的。因此,对于20日的整个一天,搜索等于或晚于20日的日期,以及直到但不包括21日的日期。至于第一部分,“等于或更晚”的一种更短的表达方式是“不在之前”,所以我们使用!<
。
String sql = "SELECT * FROM tbl WHERE when !< ? AND when < ? ; " ;
myPreparedStatement.setObject( 1 , start ) ;
myPreparedStatement.setObject( 2 , stop ) ;
我是DynamoDB的新手。我希望创建一个使用DeviceID作为哈希键、Timestamp作为范围键和一些数据的表。 在SQL中,我们可以为Timestamp使用datetime类型,但在DynamoDB中没有。 对于所选的数据类型,我应该使用什么样的时间戳格式?ISO格式(例如:2016-11-11T17:21:07.5272333Z)或纪元时间(例如:1478943038816)? 我需要在
Postgresql似乎转换了PreparedStatement的timestamp参数,我使用settimestamp设置了这个参数。 “我想做的事” [奇怪的事] 使用调试工具,我检查了pstmt值。奇怪的是,被添加到我的参数中。 pstmt=>SELECT*FROM some_table WHERE update_time bether beather bether bether bethe
问题内容: 在Go中,对于time.Now()得到的时间戳记以 m = xx.xxxx … 结尾,这意味着 m ? 如何在打印时将其删除,或者是否有其他方法或功能来获取没有 m的* 时间戳 * 例如:-for time.Now()获取输出=> 2009-11-10 23:00:00 +0000 UTC m = + 0.000000001 但是我需要这样的输出=> 2009-11-10 23:00:
问题内容: 我想将一列数据从文本更改为时间戳类型。我的数据中没有时区。我的数据格式类似于28-03-17 17:22,包括时间和日期,但没有时区。换句话说,我所有的数据都在同一时区。我该怎么做? 我在下面尝试了多种方法,但仍然找不到正确的方法。希望您能够帮助我。 当然,如果可以解决我的问题,我可以建立一个新表。 问题答案: 如果TEXT类型的文本具有有效的日期值,则按以下步骤进行更改会更容易(建议
错误[42883]错误:函数datediff(未知,没有时区的时间戳,没有时区的时间戳)不存在提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。职位:36
问题内容: 我刚刚了解了这种美观的语法 用可能是类型的元素来清空。Java的源代码如下所示: 现在,如果我以这种方式编写了一个泛型类型不出现在参数列表中的方法,那么有什么方法可以访问成为的实际类呢? 我的意思是,到目前为止,我编码同一件事的方法是 如果删除了-parameter,我将无法执行。显然我可以 但这给了我通常的警告。好的,在这里有帮助,但是实际上我想对方法的预期返回类型做些事情。如果我添