从Timestamp字段获取特定日期的记录

时间:2016-08-23 10:37:30

标签: java mysql date timestamp jpql

我的MySQL数据库中有一个Timestamp类型的字段。我想列出特定日期的所有记录,比如说,2016年8月18日。  我想为此编写一个JPQL查询。

我尝试使用TRUNC()to_DATE()UNIX_TIMESTAMP()myTimestamp = '2016-08-18'以及其他一些方法,但似乎都没有。

请为此建议一种方法。

2 个答案:

答案 0 :(得分:1)

  1. TIMESTAMPDATETIME字段代表日期(如2016-08-18)和时间(如07:43:20)。这意味着myTimestamp = '2016-08-18'不太可能出现true。只有myTimestamp具有精确值2016-08-18 00:00:00时才会出现。

  2. 当您将日期/时间值表示为文本时,必须使用ISO格式,如下所示:

    2016-08-18 07:43:20

  3. 如果您想使用格式不同的文字,可以,但必须将其转换为using STR_TO_DATE() in MySQL。这些转换函数通常在RDBMS服务器的不同品牌和型号之间不是标准化的。

    1. 要获取一天中的所有时间戳值,您需要搜索范围。这是最好的方法:
    2. 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'