【发布时间】:2021-12-01 22:51:40
【问题描述】:
select extract(dow from datefield)
从 0 到 6 中提取一个数字,其中 0 是星期日;假设周从星期一开始,有没有办法在 SQL 中获取星期几(所以 0 将是星期一)?
【问题讨论】:
-
date_part('isodow', datefield)-1
标签: sql postgresql date
select extract(dow from datefield)
从 0 到 6 中提取一个数字,其中 0 是星期日;假设周从星期一开始,有没有办法在 SQL 中获取星期几(所以 0 将是星期一)?
【问题讨论】:
date_part('isodow', datefield)-1
标签: sql postgresql date
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))
使用 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
【讨论】:
如果您想要工作日的文本版本,则可以使用 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
【讨论】:
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;
【讨论】: