【问题标题】:How to truncate a date to the beginning of week (Sunday)?如何将日期截断为一周的开始(星期日)?
【发布时间】:2019-11-04 05:46:07
【问题描述】:

我需要将日期截断到一周的开始,在我的例子中是星期日。我怎样才能在 PostgreSQL 中做到这一点?这会截断到星期一:

date_trunc('week', mydate)

【问题讨论】:

    标签: postgresql date truncate dayofweek weekday


    【解决方案1】:

    您可以将日期截断为一周的星期一,然后减去 1 天,例如:

    SELECT (date_trunc('week', now() + interval '1 day') - interval '1 day')::DATE;
        date
    ------------
     2019-06-16
    

    根据documentationdate_trunc() 接受datetimestamp 类型的值并返回timestamp(因此是最后的强制转换)。

    【讨论】:

      【解决方案2】:

      如果您从当前日期减去 dow 值(0 表示周日,6 表示周六),则您将得到上一个周日,即您以周日为基础的一周的开始

      demo:db<>fiddle

      SELECT 
          my_date - date_part('dow', my_date)::int
      FROM
          my_table
      

      Further reading, documentation

      【讨论】:

      • 这种方法的一个缺点是它只适用于date 类型,而date_trunc 同时适用于datetimestamp
      • 是的,你是对的。但是您仍然可以在操作之前将时间戳转换为日期,因为无论如何时间部分都会被截断。
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2012-04-27
      • 2019-11-21
      • 2019-11-20
      相关资源
      最近更新 更多