【问题标题】:How to select by date only if field is a timestamp?仅当字段是时间戳时如何按日期选择?
【发布时间】:2015-11-27 13:26:44
【问题描述】:

我有一个数据库字段timestamp without timezone,它的值类似于2015-11-23 14:42:55.278

现在我想只使用日期部分 2015-11-13 来查找数据库记录。

这可能吗?

最好使用hibernate和spring。

【问题讨论】:

  • 演员表(列为日期)
  • 你连接到哪个数据库?
  • 那么,您想拥有日期为2015-11-13 的所有记录,而不考虑时间?还是你想要别的?
  • 日期的所有记录,与时间无关。

标签: java sql hibernate postgresql


【解决方案1】:

我不确定在性能方面是否是最好的方法,但您可以在 2015-11-23 00:00:00.0002015-11-23 23:59:59.999 之间搜索日期

【讨论】:

  • 技术上正确,因为 Postgres 时间戳具有微秒精度。但我认为你最好使用'2015-11-23' <= datecol and datecol < '2015-11-24',这不依赖于timestamp的技术实现
  • 你是对的。在任何情况下,Postgree 都会进行从yyyy-mm-ddyyyy-mm-dd hh:mm:ss.mmm 的演员表
  • 我更喜欢这个解决方案(带有 Andomar 的更正)而不是接受的答案,因为它利用了列上的索引(假设有一个)。
【解决方案2】:

如果您只想获取 2015 年 11 月 13 日的日期,那么您可以使用 between 关键字和当天开始的时间戳来获取所有记录。

dateField between 2015-11-13:<time_of_beginning_of_day> AND 2015-11-14:<time_of_beginning_of_next_day>

dateField between 2015-11-13:<time_of_beginning_of_day> AND 2015-11-13:<time_of_end_of_day>

【讨论】:

    【解决方案3】:

    您可以将列转换为日期,例如:

    特定于 Postgres:

    the_timestamp_column::date = date '2015-11-13'
    

    或(标准 SQL)

    cast(the_timestamp_column as date) = date '2015-11-13'
    

    您还可以使用date_trunc() 将时间戳“减少”到不同级别

    http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多