【问题标题】:First day of current year今年的第一天
【发布时间】:2012-06-20 06:41:44
【问题描述】:

我在 postgresql 数据库中有以下查询

SELECT * 
FROM accounts 
where insertdate BETWEEN '2012-01-01' AND CURRENT_TIMESTAMP

那么我该如何替换'2012-01-01'询问当年的第一天

还有一个问题。当我在帐户表中有一条新记录时,同一时刻正在运行上述选择,所以它不会给我带来我刚刚制作的记录。这合理吗? 超越它的最佳方法是什么?

【问题讨论】:

  • 'YYYY-01-01' 总是一年的第一天...

标签: sql postgresql


【解决方案1】:

您正在寻找date_trunc(),它可以将日期截断到指定的精度(例如yearmonthday):

SELECT date_trunc('year', now());

在您的查询中:

SELECT * FROM accounts where insertdate BETWEEN 
date_trunc('year', now()) AND CURRENT_TIMESTAMP

【讨论】:

  • 这是完美的,但我还有一个问题。当我在帐户表中有一条新记录时,同一时刻正在运行上述选择,因此它不会给我带来我刚刚制作的记录...超越它的最佳方法是什么?
  • 如果操作发生在单独的事务中,查询应该在插入事务提交后立即找到新记录。如果它们在同一个事务中,您只需以正确的顺序运行查询。
  • 有没有办法添加“当天 23:59:59”?类似'2012-6-19 23:59:59'
  • 我正在使用播放框架 play.db.jpa.GenericModel.JPAQuery,但我不确定代码背后发生了什么
  • 如果您要使用 JPA 发布 postgres 查询,为什么还要编写它?您可以传递 Date 并按照this answer中所述设置时间字段
【解决方案2】:

您可以尝试使用这个 CURRENT_TIMESTAMP.YEAR-01-01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多