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

select extract(dow from datefield)

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

133540 次浏览

手册上说的

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=>

使用 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

with a as (select extract(isodow from date '2020-02-28') - 1 a ),
b as(select CASE
WHEN a.a=0 THEN 'Sunday'
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'
ELSE 'other'
END from a )
select * from b;

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

根据 https://www.postgresql.org/docs/current/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE,我们有以下格式选项,我们可以使用的日期。我已经展示了一些输出示例。根据文档,英文缩写的 day 值为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