#sql #postgresql #date
#sql #postgresql #Дата
Вопрос:
У меня есть таблица «даты» с идентификаторами и датами: (даты указаны во временной метке)
id start_date
1 2020-11-23 11:00:00
2 2020-11-23 12:00:00
3 2020-11-15 10:00:00
4 2020-11-24 09:00:00
5 2020-11-11 09:00:00
6 2020-11-24 13:00:00
7 2020-11-25 15:00:00
код должен возвращать идентификаторы:
id
1
2
4
6
7
я попробовал следующее:
select id
from dates
where dates.start_date > DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW()) 6 DAY)
AND dates.start_date <= DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY)
но, похоже, это не сработало. У меня синтаксическая ошибка:
ОШИБКА: синтаксическая ошибка в или около «DAYOFWEEK»
Рассмотрим сегодняшнюю дату: 2020-11-26 Я также использую PostgreSQL!
Комментарии:
1. Где в руководстве вы нашли функции
date_sub()
иdayofweek()
?2. Когда вы говорите «с прошлой недели», вы имеете в виду 1 неделю до настоящего времени, предыдущий период с понедельника по воскресенье или предыдущий период с воскресенья по субботу? Некоторые страны начинают отсчет недели с воскресенья, некоторые — с понедельника, а некоторые, я думаю, и в другие дни.
3. через 1 неделю
4. я нашел функции здесь, в stack overflow, потому что кто-то задал тот же вопрос, и это был ответ
Ответ №1:
Кажется, вы хотите:
select id
from t
where t.start_date > current_date - interval '7 day';
Или, возможно — в зависимости от того, как вы определяете «неделю».:
where t.start_date >= date_trunc('week', current_date) - interval '7 day' and
t.start_date < date_trunc('week', current_date)