从PostgreSQL中的日期字段中提取星期几,假设星期一开始数周

Eug*_*nio 11 sql postgresql date

select extract(dow from datefield)
Run Code Online (Sandbox Code Playgroud)

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

a_h*_*ame 20

从手册

isodow

    The day of the week as Monday (1) to Sunday (7)
Run Code Online (Sandbox Code Playgroud)

所以,你只需要从结果中减去1:

psql (9.6.1)
Type "help" for help.

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


Mr.*_*ale 12

使用date_part函数dow()

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

   select extract(dow from date '2016-12-18'); /* sunday */
Run Code Online (Sandbox Code Playgroud)

输出:0

    select extract(isodow from date '2016-12-12'); /* Monday  */
Run Code Online (Sandbox Code Playgroud)

输出:1


Max*_*oll 12

如果您想要工作日的文本版本,那么您可以使用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
Run Code Online (Sandbox Code Playgroud)