【问题标题】:Extract day of week from date field in PostgreSQL assuming weeks start on Monday假设星期从星期一开始,从 PostgreSQL 的日期字段中提取星期几
【发布时间】:2021-12-01 22:51:40
【问题描述】:
select extract(dow from datefield)

从 0 到 6 中提取一个数字,其中 0 是星期日;假设周从星期一开始,有没有办法在 SQL 中获取星期几(所以 0 将是星期一)?

【问题讨论】:

  • date_part('isodow', datefield)-1

标签: sql postgresql date


【解决方案1】:

From the manual

isodow

    The day of the week as Monday (1) to Sunday (7)

因此,您只需从该结果中减去 1:

psql (9.6.1)
Type "help" for help.

postgres=> select extract(isodow from date '2016-12-12') - 1;
  ?column?
-----------
         0
(1 row)
postgres=>

【讨论】:

  • 从当前日期时间派生:SELECT EXTRACT(isodow from date (NOW()::date))
【解决方案2】:

使用 date_part 函数 dow()

这里 0=星期日,1=星期一,2=星期二,... 6=星期六

   select extract(dow from date '2016-12-18'); /* sunday */

输出:0

    select extract(isodow from date '2016-12-12'); /* Monday  */

输出:1

【讨论】:

    【解决方案3】:

    如果您想要工作日的文本版本,则可以使用 to_char(date, format) 函数提供所需的日期和格式。

    根据https://www.postgresql.org/docs/current/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE,我们有以下可用于日期的格式选项。我已经展示了一些输出示例。根据文档,英文缩写的日期值是 3 个字符,其他语言环境可能会有所不同。

    select To_Char("Date", 'DAY'), * from "MyTable"; -- TUESDAY
    select To_Char("Date", 'Day'), * from "MyTable"; -- Tuesday
    select To_Char("Date", 'day'), * from "MyTable"; -- tuesday
    select To_Char("Date", 'dy'), * from "MyTable";  -- tue
    select To_Char("Date", 'Dy'), * from "MyTable";  -- Tue
    select To_Char("Date", 'DY'), * from "MyTable";  -- TUE
    

    【讨论】:

      【解决方案4】:
      with a as (select extract(isodow from date '2020-02-28') - 1 a ),
      b as(select CASE 
               WHEN a.a =1 THEN 'Monday'
               WHEN a.a =2 THEN 'Tuesday'
               WHEN a.a=3 THEN 'Wednesday'
               WHEN a.a=4 THEN 'Thursday'
               WHEN a.a=5 THEN 'Friday'
               WHEN a.a=6 THEN 'Saturday'
               WHEN a.a=7 THEN 'Sunday'
           ELSE 'other'
         END from a ) 
       select * from b;
      

      【讨论】:

      • 这里的逻辑很好(并且很有帮助),但是文本分配不正确。来自postgresql.org/docs/8.1/functions-datetime.html星期天(0)到星期六(6)。 . .请注意,extract 的星期几编号与 to_char(..., 'D') 函数的编号不同。 因此,Bharti 的注释虽然适用于 to_char(),但对于 extract(),确保你的星期日是 0
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2020-07-02
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多