我的MySQL数据库中有一个Timestamp类型的字段。我想列出特定日期的所有记录,比如说,2016年8月18日。 我想为此编写一个JPQL查询。
我尝试使用TRUNC()
,to_DATE()
,UNIX_TIMESTAMP()
,myTimestamp = '2016-08-18'
以及其他一些方法,但似乎都没有。
请为此建议一种方法。
答案 0 :(得分:1)
TIMESTAMP
和DATETIME
字段代表日期(如2016-08-18)和时间(如07:43:20)。这意味着myTimestamp = '2016-08-18'
不太可能出现true
。只有myTimestamp
具有精确值2016-08-18 00:00:00
时才会出现。
当您将日期/时间值表示为文本时,必须使用ISO格式,如下所示:
2016-08-18 07:43:20
如果您想使用格式不同的文字,可以,但必须将其转换为using STR_TO_DATE()
in MySQL。这些转换函数通常在RDBMS服务器的不同品牌和型号之间不是标准化的。
WHERE myTimestamp >= DATE('2016-08-18')
AND myTimestamp < DATE('2016-08-18') + INTERVAL 1 DAY
这种搜索方法虽然比其他方法更冗长,但允许MySQL在myTimestamp上使用索引。如果你的表有很多行,这可以节省大量的时间。
数据库服务器的品牌和型号之间的日期和时间处理大多没有标准化。
修改此处评论中的查询格式不正确。它说:
SELECT b.name, b.publisher, sum(p.copies)
FROM PurchaseEntity p, BookEntity b /* old-timey comma join! */
WHERE p.bookEntity.bookId = b.bookId /* wrong! */
AND date(p.purchaseTime)= '2016-08-18'
group by b.bookId /* nonstandard! */
您在p.bookEntity.bookId
子句中使用WHERE
。那不对。
您也在使用MySQL的nonstandard extension to GROUP BY
。
您的查询可能应该这样说。在尝试将其构建到Java程序之前,应该使用SQL客户端程序测试此查询。
SELECT b.name, b.publisher, sum(p.copies)
FROM PurchaseEntity p,
JOIN BookEntity b ON p.bookId = b.bookId
AND date(p.purchaseTime)= '2016-08-18'
group by b.name, b.publisher
答案 1 :(得分:0)
使用date()MySQL函数获取时间戳的日期部分或日期时间字段:
select * from yourtable where date(timestamp_field)= '2016-08-18'