过滤掉 PostgreSQL 中指定星期几的记录

Filter out records in specified day of week in PostgreSQL

我有内部查询,它根据条件之间的日期返回指定的日期。我成功获得了结果,但在外部查询中我想检查日期是否在我提供的字符串中 ex-'Friday,Saturday'

SELECT * from 
    (
    SELECT id, to_char(markupdate, 'Day') as dayofweek 
    FROM test t 
    WHERE t.markupdate BETWEEN 'Thu Jul 11 00:00:00 IST 2019' AND 'Sat Jul 20 00:00:00 IST 2019'
    ) data
    WHERE data.dayofweek in ('Friday,Sunday');

您可以使用正则表达式将 data.dayofweek 与您要查找的字符串(FridaySunday)相匹配。你甚至不需要你的子查询,类似的东西也应该有效:

 SELECT id, to_char(markupdate, 'Day') as dayofweek 
 FROM test t 
 WHERE t.markupdate BETWEEN '2019-07-11 00:00:00+0530' AND '2019-07-20 00:00:00+0530'
 AND dayofweek~'(Friday|Sunday)';

有关更多背景信息,请查看 Postgres docs

SELECT id, to_char(markupdate, 'Day') as dayofweek 
FROM test t 
WHERE t.markupdate BETWEEN 'Thu Jul 11 00:00:00 IST 2019' AND 'Sat Jul 20 00:00:00 IST 2019' 
AND date_part('dow', markupdate) in (5,0);

postgres 中的周日期 return 值如下:

0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday

您可以使用更标准的 SQL EXTRACT('dow' FROM markupdate) 而不是 date_part('dow', markupdate),但是 dow 是一个扩展,不是 SQL 标准的一部分。